2016-10-06 5 views
0

編集ボックスからMarathi '1.2'として値を取得した場合、この値を1.2のfloat形式にしたい場合は、_wtof()を試しましたが、 _wtoi()と同じ働きをします。それは大丈夫ですが、-_wtof()ですか?別の機能を提案してください。アラビア語数字にMarathiスクリプト(非アラビア数字)を変換する

+1

あなたは私が推測する、文字列を自分で解析することができます。または、シンボルの1対1の対応がある場合は、文字列charsを数字に変換してから別の文字列に変換し、それをatofで解析します。 –

+0

私は '1.2'はMarathiスクリプトで書かれた数字だと思いますか? – sashoalm

+0

Thanx Adrianはい私はそれを解析しましたが、私はそれが標準的な問題だと思うので、ユニコードcstringを浮動小数点値 –

答えて

1

実は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::stofstd::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()); 
} 
関連する問題