Преобразование чисел в маратхи (не арабских) в арабские

Если мы получим значение из поля редактирования как Marathi ‘१.२’, тогда я хочу, чтобы это значение равнялось 1,2 в формате с плавающей запятой, я попытался _wtof (), но он потерпел неудачу, он вернул только 0. Его работа такая же, как _wtoi (). Это нормально, но -_wtof ()? Пожалуйста, предложите что-нибудь другое.

0

Решение

На самом деле std::stof а также std::stod отлично работает в Visual Studio 2015

#include <iostream>
#include <string>

double convert(const std::wstring src)
{
double f = 0;
try {
f = std::stod(src);
}
catch (...)
{
//error, out of range or invalid string
}

return f;
}

int main()
{
std::cout << std::setprecision(20);
std::cout << convert(L"१२३४५६७८९.१२३४५६७८९") << "\n";
std::cout << convert(L"१.२") << "\n";
return 0;
}

Но _wtof не работает Вы можете использовать эти методы, если есть несовместимость в более ранней версии:

double convert(const std::wstring src)
{
std::wstring map = L"०१२३४५६७८९";

//convert src to Latin:
std::wstring result;
for (auto c : src)
{
int n = map.find(c);
if (n >= 0)
result += (wchar_t)(n+ (int)(L'0'));
else
result += c;
}

double n = 0;
try { n = std::stof(result); }
catch (...)
{
std::wcout << L"error" << result << "\n";
}
return n;
}

int main()
{
std::cout << convert(L"१.१") << "\n";
std::cout << convert(L"१.२") << "\n";
return 0;
}

или используя CString:

double convert(const CString src)
{
CString map = L"०१२३४५६७८९";

//convert src to Latin:
CString result;
for (int i = 0; i < src.GetLength(); i++)
{
int n = map.Find(src[i]);
if (n >= 0)
result += (wchar_t)(n + (int)(L'0'));
else
result += src[i];
}

return _wtof(result.GetString());
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]