C#Double.ToString()错误结果

时间:2018-09-20 05:28:21

标签: c# string format tostring

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

我尝试过 Double.ToString(“ 0.0000000000000000”)结果1.0000000000001100

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

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

1 个答案:

答案 0 :(得分:5)

一个floatdouble浮点数(IEEE 754)用于 Sign Mantissa 指数 base 2 中,恰好发生了数字1.000000000000113不适合 base 2 数字。

但是,我们确实有浮点类型,它们可以在 base 10 decimal)上进行工作,它对有理数的精度更高,但是对t的数字范围

  • 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