我在 .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/