c++ - 将马拉地文(非阿拉伯文)数字转换为阿拉伯数字

标签 c++ number-systems

如果我们从编辑框中获取马拉地语“१.२”的值,那么我希望这个值为浮点格式的 1.2,我尝试了 _wtof () 但它失败了,它只返回 0。它的工作与 _wtoi () 相同。没问题但是-_wtof()?请提出任何其他功能。

最佳答案

实际上 std::stofstd::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());
}

关于c++ - 将马拉地文(非阿拉伯文)数字转换为阿拉伯数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39895278/

相关文章:

c++ - 我的播放器类中的 getter 和 setter 问题

c++ - boost multi_index 示例 : error: invalid operands to binary expression

java - 为什么 Apache Commons 将 '१२३' 视为数字?

algorithm - 将四进制转换为八进制。 ASM 8086

c++ - Apache 交叉编译错误./gen_test_char : cannot execute binary file

c++ - 初始化指向常量数组的指针

c++ - 为什么带括号的include找不到头文件?

c++ - 如何将非常大的十进制数转换为阶乘数系统?

基于数字系统的算法?

将 Base-10 转换为 Base-9 的 Java 代码