C# Double.ToString() 错误结果

C# Double.ToString() wrong result

我正在尝试使用 ToString() 方法显示双精度值。 该值为 1.000000000000113。 , 使用 Double.ToString("F16") 结果 1.0000000000001100 , 使用 Double.ToString("F17") 结果 1.000000000000011000

我试过了 Double.ToString("0.0000000000000000") 结果 1.0000000000001100

似乎 ToString() 将第 14 个数字以上的所有小数设置为零。

我正在使用 .Net 4.5.2。 我怎么解决这个问题。

A floatdouble 浮点数 (IEEE 754) 在 Sign, MantissaExponent in base 2,恰好数字 1.000000000000113 不适合 base 2 数。

但是,我们确实有 dobase 10 (decimal) 上工作的浮点类型,它有更多有理数的精度,但没有数值范围

  • float 近似范围(±1.5 x 10^−45±3.4 x 1038
  • double 近似范围(±5.0 × 10^−324±1.7 × 10308
  • decimal 近似范围(±1.0 x 10^-28±7.9228 x 1028

样本

double val = 1.000000000000113;
Console.WriteLine(val);
decimal val2 = 1.000000000000113m;
Console.WriteLine(val2);

输出

1.00000000000011
1.000000000000113

Full Demo Here