gpt4 book ai didi

c# - 将 float 转换为 decimal 在 C# 中会失去精度

转载 作者:太空狗 更新时间:2023-10-29 22:33:51 26 4
gpt4 key购买 nike

在 C# 4.0 中,以下转换行为非常出乎意料:

(decimal)1056964.63f
1056965

转换为 double 效果很好:

(double)1056964.63f
1056964.625

(decimal)(double)1056964.63f
1056964.625

这是设计使然吗?

最佳答案

问题出在您的初始值上 - float 无论如何只能精确到 7 位有效的小数位:

float f = 1056964.63f;
Console.WriteLine(f); // Prints 1056965

因此,第二个示例在某些方面确实出乎意料。

现在 f 中的精确值是 1056965.625,但这是从大约 1056964.563 到 1056964.687 之间的所有值的给定值 - 所以即使“.6”部分也不是它总是正确的。这就是为什么 System.Single 状态的文档:

By default, a Single value contains only 7 decimal digits of precision, although a maximum of 9 digits is maintained internally.

当您转换为 double 时,额外的信息仍会保留,因为这样可以在不“解释”它的情况下保留它 - 将其转换为十进制形式(打印或 decimal 类型)通过知道它不能“信任”最后两位数的代码。

关于c# - 将 float 转换为 decimal 在 C# 中会失去精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8284275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com