可能重复:
从字符串中读取双值
我在把字符串转换成双精度时遇到了问题,我总是得到奇怪的结果。我想转换以下字符串:
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.TryParse
或Double.Parse
编辑:但要注意格式。例如,如果你是德国人,你需要键入140,50,而不是140.50,因为140.50就是14050。或者你传递的参数,你不在乎文化(见其他帖子)。