2013-04-27 61 views

回答

9

那是因为你的文化设置,您可以指定培养Parse方法来获得所需的输出:

string a = "10.23"; 
double b = double.Parse(a, System.Globalization.CultureInfo.InvariantCulture); 
// b == 10.23 
9

在德国逗号(,)作为小数点,而大多数英语文化和您的示例使用句号(.)作为小数点。由于Double.Parse使用线程默认文化来解析数字,并且线程默认文化设置为德语,因此您得到错误的结果。

而应该明确指定文化:

using System.Globalization; 

string a = "10.23"; 
double b = Double.Parse(a, CultureInfo.InvariantCulture); 

不变文化使用句号作为小数点,所以我建议你使用来代替。或者,如果您从已知使用特定文化习俗书写的来源获取该字符串,请改为使用该文化。

1

或者您的号码所在地格式化,试试这个我来源:

分机:

public static class Ext 
{ 

    public static double? AsLocaleDouble(this string str) 
    { 
     var result = double.NaN; 
     var format = Thread.CurrentThread.CurrentUICulture.NumberFormat; 

     double.TryParse(str, NumberStyles.AllowDecimalPoint, format, out result); 

     return result; 
    } 
} 

测试:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var str = "10,23"; 

     Thread.CurrentThread.CurrentUICulture = new CultureInfo("uz-Cyrl-UZ"); 
     Thread.CurrentThread.CurrentCulture = new CultureInfo("uz-Cyrl-UZ"); 

     Console.WriteLine(str.AsLocaleDouble()); 

     Console.ReadKey(); 
    } 
} 
+0

我喜欢的TryParse不是直接解析多。这是优雅的解决方案。 – 2013-04-27 12:53:33

相关问题