【发布时间】:2017-03-04 13:59:31
【问题描述】:
我有一个来自源的字符串,它是这样的 unicode 数字数字:
n = 117 => 117
现在我想将此字符串转换为 int。但是当我尝试使用 Convert.ToInt 时,我得到了这个异常。 我该如何解决这个问题?
【问题讨论】:
我有一个来自源的字符串,它是这样的 unicode 数字数字:
n = 117 => 117
现在我想将此字符串转换为 int。但是当我尝试使用 Convert.ToInt 时,我得到了这个异常。 我该如何解决这个问题?
【问题讨论】:
Int32 value = 0;
if (Int32.TryParse(String.Join(String.Empty, "۱۱۷".Select(Char.GetNumericValue)), out value))
{
Console.WriteLine(value);
//....
}
【讨论】:
+ 或- 开头的数字
我们将使用GetNumericValue() 方法将每个字符转换为数字。文档很清楚:
将指定的数字 Unicode 字符转换为双精度浮点数。
using System;
using System.Linq;
public class Program
{
public static void Main()
{
Console.WriteLine(ParseNumeric("۱۱۷"));
}
public static int ParseNumeric(string input)
{
return int.Parse(string.Concat(input.Select(c =>
"+-".Contains(c)
? c.ToString()
: char.GetNumericValue(c).ToString())));
}
}
如果您想支持double,请将int 替换为double,并在Contains() 之前的字符串中添加.。
如果您更喜欢使用TryParse 而不是基本的Parse,请点击:
public static bool TryParseNumeric(string input, out int numeric)
{
return int.TryParse(string.Concat(input.Select(c =>
"+-".Contains(c)
? c.ToString()
: char.GetNumericValue(c).ToString())), out numeric);
}
【讨论】: