如果我们从编辑框中获取值作为 Marathi '१.२' 那么我希望这个值是浮点格式的 1.2,我尝试了 _wtof () 但它失败了它只返回 0。它的工作与 _wtoi () 相同。没关系,但是-_wtof()?请提出任何其他功能。
问问题
104 次
1 回答
1
实际上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());
}
于 2016-10-06T12:45:59.893 回答