0
編集ボックスからMarathi '1.2'として値を取得した場合、この値を1.2のfloat形式にしたい場合は、_wtof()を試しましたが、 _wtoi()と同じ働きをします。それは大丈夫ですが、-_wtof()ですか?別の機能を提案してください。アラビア語数字にMarathiスクリプト(非アラビア数字)を変換する
編集ボックスからMarathi '1.2'として値を取得した場合、この値を1.2のfloat形式にしたい場合は、_wtof()を試しましたが、 _wtoi()と同じ働きをします。それは大丈夫ですが、-_wtof()ですか?別の機能を提案してください。アラビア語数字にMarathiスクリプト(非アラビア数字)を変換する
実は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
Visual Studioでうまくstd::stof
とstd::stod
仕事は動作しません。
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対1の対応がある場合は、文字列charsを数字に変換してから別の文字列に変換し、それをatofで解析します。 –
私は '1.2'はMarathiスクリプトで書かれた数字だと思いますか? – sashoalm
Thanx Adrianはい私はそれを解析しましたが、私はそれが標準的な問題だと思うので、ユニコードcstringを浮動小数点値 –