2

可能重复:
从字符串中读取双精度值

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

 string Test = "17828.571428571";

我这样尝试过(因为它通常可以工作):

Double _Test = Convert.ToDouble(Test);

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

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

谢谢你帮助我!

芬恩

4

3 回答 3

9

利用InvariantCulture

Double _Test = Convert.ToDouble(Test,CultureInfo.InvariantCulture);

编辑:我相信您当前的文化是 "German" 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
于 2012-08-27T06:24:38.970 回答
4

尝试Double.TryParse或者Double.Parse如果您确定格式正确

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

于 2012-08-27T06:24:11.913 回答
4
double _Test = double.Parse(Test,CultureInfo.InvariantCulture);

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

于 2012-08-27T06:25:18.997 回答