【问题标题】:C# Double.ToString() wrong resultC# Double.ToString() 错误结果
【发布时间】:2018-09-20 05:28:20
【问题描述】:

我正在尝试使用 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。 我怎么解决这个问题。

【问题讨论】:

  • 尝试使用十进制
  • Docs - 注意“精度”。
  • 谢谢你的提示,我没有关注双精度,因为我调试了代码并且调试器正确显示了双精度数。

标签: c# string format tostring


【解决方案1】:

floatdouble 浮点数 (IEEE 754) 在 SignMantissaExponent 中工作em>base 2,恰好数字1.000000000000113 不适合base 2 数字。

但是,我们确实有确实base 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

【讨论】:

  • 非常感谢您的快速答复,
猜你喜欢
  • 1970-01-01
  • 2021-11-03
  • 2016-06-30
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多