将String转换为Double - 结果失败

时间:2012-08-27 06:23:05

标签: c#

  

可能重复:
  Reading a double value from a string

我将String转换为double时遇到问题,我总是得到奇怪的结果。 我想转换以下字符串:

 string Test = "17828.571428571";

我试过这样(因为它通常有效):

Double _Test = Convert.ToDouble(Test);

结果是:17828571428571(没有点,lol)

我需要它作为一个双倍,然后Math.Round(),所以我在我的例子中有17828。 我的第二个想法是拆分字符串,但这真的是最好的方法吗? :S

感谢您的帮助!

芬兰

3 个答案:

答案 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.TryParseDouble.Parse

编辑:但请注意格式。例如,如果你是德国人,你需要键入140,50而不是140.50,因为140.50将是14050。 或者你作为你不关心文化的参数传递(参见其他文章)。

答案 2 :(得分:4)

double _Test = double.Parse(Test,CultureInfo.InvariantCulture);

您需要将转换操作的格式提供程序设置为不变。