将字符串转换为Double-Result失败



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

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

 string Test = "17828.571428571";

我这样试过(因为它正常工作):

Double _Test = Convert.ToDouble(Test);

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

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

谢谢你帮我!

Finn

使用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
double _Test = double.Parse(Test,CultureInfo.InvariantCulture);

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

如果确定格式正确,请尝试Double.TryParseDouble.Parse

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

相关内容

最新更新