1
Double x = 11.123456789123456;
string y = Convert.ToString(x);
//gives y=11.1234567891235
//y should be =11.123456789123456

从上面的代码如何防止最后一个数字(6)被截断

4

3 回答 3

6

利用

string y = x.ToString("G17");

或者

string y = x.ToString("R");

如此处所写:

默认情况下,返回值仅包含 15 位精度,尽管内部维护最多 17 位。如果此实例的值大于 15 位,则 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol 而不是预期的数字。如果您需要更高的精度,请使用“G17”格式规范指定格式,它始终返回 17 位精度,或“R”,如果数字可以用该精度表示,则返回 15 位数字,如果数字只能表示,则返回 17 位数字以最高精度表示。

请注意,并非所有数字都可以准确表示...

11.123456789123458.ToString("G17") == "11.123456789123457"
于 2013-09-10T07:54:56.043 回答
4

double只能精确到 15-16 位,请尝试使用decimaltype

Msdn

十进制

于 2013-09-10T07:53:30.037 回答
1

发生这种情况的原因是因为 Double 占用 8 个字节并且精度为 15-16 位。改用十进制

Decimal x = 11.123456789123456M;
string y = Convert.ToString(x);
//gives y=11.12345678912356

请参阅此链接,寻找 cds333 的答案

于 2013-09-10T08:05:56.277 回答