首页 >后端开发 >C++ >为什么 C# 中 10 * 0.69 不等于 6.9?

为什么 C# 中 10 * 0.69 不等于 6.9?

DDD
DDD原创
2025-01-10 08:48:41836浏览

Why is 10 * 0.69 not exactly 6.9 in C#?

C# 乘法中的浮点精度问题

让我们检查一下 C# 代码片段:

<code class="language-csharp">double i = 10 * 0.69;</code>

虽然您预计 i 等于 6.9,但实际输出通常是 6.8999999999999995。这种差异是由 .NET 框架内浮点运算的固有限制引起的。

浮点数与十进制数不同,是使用二进制格式表示的。 这种二进制表示法意味着某些十进制值,包括那些具有无限重复小数部分的值(例如 0.69),无法完美地表示。相反,它们是近似值。

编译器意识到了这一限制,经常通过直接存储 6.9 的近似值来优化计算,而不是在运行时计算 10 * 0.69。 这种近似解释了观察到的细微差异。

为了获得更高的准确性,特别是在金融应用程序中,请考虑使用 decimal 数据类型。 decimal 采用以 10 为基数的表示形式,提供更精确的十进制数表示,例如 0.69,从而最大限度地减少与二进制浮点运算相关的舍入误差。

以上是为什么 C# 中 10 * 0.69 不等于 6.9?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn