格式化大双精度。ToString(“f”) [复制]

Format big double with .ToString("f") [duplicate]

提问人:Ivan Magnin-oddos 提问时间:9/26/2023 最后编辑:Ivan Magnin-oddos 更新时间:9/27/2023 访问量:40

问:

我被困住了,如果你能帮助我,我将不胜感激 我在将大双精度转换为字符串时遇到问题ToString("f")

在我的代码中,我有这个元素

double test = Convert.ToDouble(2023092619393694.000)

在间谍中,如果我使用值,则值很好
,返回值为“2023092619393690.000”(末尾缺少4)
test.ToString("f3")

再现

Convert.ToDouble(2023092619393694.000).ToString( "F3",System.Globalization.CultureInfo.InvariantCulture)
C# tostring

评论

0赞 phuclv 9/27/2023
double 是 IEEE-754 binary64,只有 53 位有效数字,即 ~15 个十进制数字的精度。 包含 16 位十进制数字2023092619393694
0赞 phuclv 9/27/2023
为什么 Convert.ToDecimal(Double)舍五入到 15 位有效数字?,双精度到十进制,15 位后不四舍五入
2赞 Ralf 9/27/2023
您使用的是 Net Core 3 之前的框架?应该在那之后的版本上工作。但是@phuclv这种说法在较新的框架中仍然是正确的,它只是不太可能发生(更不用说在更大的双打上)。关键句“以前的实现有一个错误,对于包含超过 15 个有效数字的字符串,它实际上会用零填充剩余的数字,无论它们出现在小数点之前还是之后。

答: 暂无答案