C#Double.ToString()结果错误

1 c# string format tostring

我试图使用ToString()方法显示一个double值.值为1.000000000000113.,使用Double.ToString("F16")结果1.0000000000001100,使用Double.ToString("F17")结果1.00000000000011000

我尝试使用Double.ToString("0.0000000000000000")结果1.0000000000001100

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

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

AAA*_*ddd 5

A floatdouble浮点数(IEEE 754)在基数2中符号,尾数指数上工作,恰好这个数字不适合基数2.1.000000000000113

然而,我们确实有浮点类型的工作基地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);
Run Code Online (Sandbox Code Playgroud)

产量

1.00000000000011
1.000000000000113
Run Code Online (Sandbox Code Playgroud)

完整的演示在这里