我将String转换为double时遇到问题,我总是得到奇怪的结果。 我想转换以下字符串:
string Test = "17828.571428571";
我试过这样(因为它通常有效):
Double _Test = Convert.ToDouble(Test);
结果是:17828571428571(没有点,lol)
我需要它作为一个双倍,然后Math.Round(),所以我在我的例子中有17828。 我的第二个想法是拆分字符串,但这真的是最好的方法吗? :S
感谢您的帮助!
芬兰
答案 0 :(得分:9)
使用InvariantCulture
Double _Test = Convert.ToDouble(Test,CultureInfo.InvariantCulture);
编辑:我相信您当前的文化是“德语”de-DE
,它使用,
作为浮点数。
尝试以下代码。您也可以在转换期间使用NumberFormatInfo.InvariantInfo
。
string Test = "17828.571428571";
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
double d = Convert.ToDouble(Test);
double d2 = Convert.ToDouble(Test, CultureInfo.InvariantCulture);
double d3 = Convert.ToDouble(Test, NumberFormatInfo.InvariantInfo);
string Test2 = "17828,571428571"; //Notice the comma in the string
double d4 = Convert.ToDouble(Test2);
Console.WriteLine("Using comma as decimal point: "+ d4);
输出:(注意输出中的逗号)
Wihtout Invariant: 17828571428571
With InvariantCulture: 17828,571428571
With NumberFormatInfo.InvariantInfo: 17828,571428571
Using comma as decimal point: 17828,571428571
答案 1 :(得分:4)
如果您确定格式正确
,请尝试Double.TryParse
或Double.Parse
编辑:但请注意格式。例如,如果你是德国人,你需要键入140,50而不是140.50,因为140.50将是14050。 或者你作为你不关心文化的参数传递(参见其他文章)。
答案 2 :(得分:4)
double _Test = double.Parse(Test,CultureInfo.InvariantCulture);
您需要将转换操作的格式提供程序设置为不变。