.Net 舍入问题

标签 .net vb.net rounding

我在 .Net 中有一个舍入问题。

我将一个 3 位数四舍五入到两位数,这导致了一个数字的一​​些问题。

如果我尝试将 34.425 四舍五入到两位小数,它应该四舍五入到 34.43。我正在使用 roundawayfromzero 选项,到目前为止,它适用于程序中的每个数字,除了这个数字。

代码Math.Round(34.425, 2, MidpointRounding.AwayFromZero)应该等于 34.43 但是它等于 34.42。

如果我用任何其他号码尝试这个,它工作正常。

Math.Round(34.435, 2, MidpointRounding.AwayFromZero) = 34.44

Math.Round(34.225, 2, MidpointRounding.AwayFromZero) = 34.23

Math.Round(34.465, 2, MidpointRounding.AwayFromZero) = 34.47

我只是想看看以前有没有人遇到过这个问题?

现在我已经通过将数字转换为小数来解决这个问题。我已将代码更改为此,现在可以正常工作了:
Math.Round(CDec(34.425), 2, MidpointRounding.AwayFromZero) = 34.43

我只是在寻找为什么我的旧代码不起作用的原因。

谢谢!

将代码更新为正确的 AwayFromZero

最佳答案

浮点数从来都不是精确的,34.425 可能有一个内部表示 34.4249999999999.. 它将被四舍五入到 34.42。

如果您需要数字的精确表示,请使用 decimal类型。

关于.Net 舍入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3969674/

相关文章:

c# - .NET Core 和 .NET Framework 交互

x86 - SSE/AVX 是否提供确定结果是否四舍五入的方法?

php - 如何四舍五入到下一个偶数?

c# - 网络服务包装器

c# - 我可以使用不相关的类型作为泛型类中的约束吗?

c# - 如何强制开发人员将属性应用于类?

c# - C++ 中的垃圾回收

vb.net - 有没有办法向 ComboBox 添加可点击的图标?

mysql - 将 vb.net 中的 TimeofDay 转换为分钟

python - Python 中舍入 float 的问题