Double x = 11.123456789123456;
string y = Convert.ToString(x);
//gives y=11.1234567891235
//y should be =11.123456789123456
从上面的代码中我如何防止最后一个数字(6)被截断
答案 0 :(得分:6)
使用
string y = x.ToString("G17");
或
string y = x.ToString("R");
写成here:
默认情况下,返回值仅包含15位精度,但内部最多保留17位数。如果此实例的值大于15位,ToString将返回PositiveInfinitySymbol或NegativeInfinitySymbol而不是预期的数字。如果您需要更高的精度,请指定格式为“G17”格式规范,它始终返回17位精度,或“R”,如果数字可以用该精度表示,则返回15位数,如果数字只能表示,则返回17位数以最大精度表示。
请注意,并非所有数字都可以准确表示......
11.123456789123458.ToString("G17") == "11.123456789123457"
答案 1 :(得分:4)
答案 2 :(得分:1)
发生这种情况的原因是因为Double占用8个字节,精度为15-16位。 请改用小数
Decimal x = 11.123456789123456M;
string y = Convert.ToString(x);
//gives y=11.12345678912356
参考this link,通过cds333寻找答案