6

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

例如,在马拉地语中:

  • ४५ = 45
  • ९९ = 99

如何将此马拉地语字符串"४५"转换为其实际整数值,即45

我用谷歌搜索了很多,但没有发现任何有用的东西。我尝试使用System.Text.Encoding.Unicode.GetString()获取字符串然后尝试解析,但在这里也失败了。

4

4 回答 4

4

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

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

Int32.Parse("९९".Replace("९", "9"))
于 2013-05-19T09:15:26.417 回答
2

快速破解@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 作为结果

于 2013-05-19T10:13:39.887 回答
0

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

于 2013-05-20T15:09:44.907 回答
0

我找到了我的解决方案...以下代码会将给定的马拉地语数字转换为等效的拉丁数字..
感谢@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();
    }

此方法适用于 + 和 - 数字。
问候古鲁普拉萨德

于 2013-05-20T04:32:08.787 回答