在将字符串解析为双倍时,我们面临着一个问题。我们需要将18位数字符串(< 123,456,789,012>。< 123456>)转换为double。它只返回小数点后的5位数。当我们试图减少数字的数字时,它工作得很好。我们附上了三个不同场景的屏幕截图。变量' S'是输入,retValue是输出值。
请帮助我们将123,456,789,012.123456转换为123456789012.123456
string s = "123,456,789,012.123456";
double retVal;
System.Globalization.CultureInfo cInfo = new System.Globalization.CultureInfo(System.Web.HttpContext.Current.Session["culture"].ToString());
retVal = double.Parse(s, NumberStyles.Any, cInfo);
答案 0 :(得分:6)
double
的精度最高为15位,请参阅MSDN:
Double值最多包含15个十进制数字的精度,但内部最多保留17位数。
答案 1 :(得分:3)
您遇到了所有浮点数据类型(如double
)固有的精度问题。如果您需要更精确的精确度,则应使用decimal
代替:
string s = "987,654,321.123456";
decimal d = decimal.Parse(s);
查看实际操作:https://repl.it/Gtoy/0
编辑:正如Panagiotis Kanavos指出的那样,decimal
也不完美。它使用128位而不是double
的64位。然而,double
使用其位来表示更大的数字,decimal
使用它来表示更小的数字,准确度更高。