将由区域性特定数字组成的Unicode字符串转换为整数值

本文关键字:字符串 Unicode 转换 整数 区域性 数字 | 更新日期: 2023-09-27 18:14:29

我正在开发一个马拉地语的程序。在其中,我想通过获取其实际整数值来添加/验证在马拉地Unicode中输入的数字。

例如,马拉地语:

  • ४५ = 45
  • ९९ = 99

我如何将这个马拉地字符串"४५"转换为其实际的整数值,即45 ?

我用谷歌搜索了很多,但没有找到有用的。我尝试使用System.Text.Encoding.Unicode.GetString()获得字符串,然后尝试解析,但这里也失败了。

将由区域性特定数字组成的Unicode字符串转换为整数值

正确的方法是使用Char。GetNumericValue,它允许您将单个字符转换为相应的数值,然后构造完整的值。例如,Char.GetNumericValue('९')给出9。

根据您的目标,可能更容易将每个国家数字字符替换为相应的不变数字并使用常规解析函数。

Int32.Parse("९९".Replace("९", "9"))

快速破解@Alexi的回复

public static double ParseValue(string value)
{
    return double.Parse(string.Join("",
        value.Select(c => "+-.".Contains(c)
           ? "" + c: "" + char.GetNumericValue(c)).ToArray()),
        NumberFormatInfo.InvariantInfo);
}

调用ParseValue("१२३.३२१")得到123.321作为结果

我找到了我的解决方案…下面的代码将给定的马拉地语数字转换为等效的拉丁数字。
感谢@Alexei,我只是改变了你的一些代码,它工作得很好。

 string ToLatinDigits(string nativeDigits)
    {
        int n = nativeDigits.Length;
        StringBuilder latinDigits = new StringBuilder(capacity: n);
        for (int i = 0; i < n; ++i)
        {
            if (char.IsDigit(nativeDigits, i))
            {
                latinDigits.Append(char.GetNumericValue(nativeDigits, i));
            }
            else if (nativeDigits[i].Equals('.') || nativeDigits[i].Equals('+') || nativeDigits[i].Equals('-'))
            {
                latinDigits.Append(nativeDigits[i]);
            }
            else
            {
                throw new Exception("Invalid Argument");
            }
        }
        return latinDigits.ToString();
    }

此方法适用于+和-数。
问候Guruprasad

Windows.Globalization。DecimalFormatter将解析除拉丁语以外的不同数字系统,包括Devanagari(马拉地语使用的)。