我使用Math.Round(1.7346, 2, AwayFromZero)哪个应该给我1,74 - 但它实际上给了我1.73.
我知道是因为这个:
"由于将十进制值表示为浮点数或对浮点值执行算术运算可能导致精度损失,因此在某些情况下,Round(Double,Int32,MidpointRounding)方法可能看起来不会将中点值舍入为由mode参数指定.这在下面的示例中说明,其中2.135舍入到2.13而不是2.14.这是因为内部方法将值乘以10*位,并且在这种情况下乘法运算会受到精度损失的影响".
但是我应该使用哪种.NET方法来进行正确的舍入?
1.7346应该舍入到1.73,即使是AwayFromZero,因为这只会改变"当一个数字介于两个其他人之间时"的舍入行为(例如,如果它是1.735).
您可以使用获得所需的行为
Math.Round(Math.Round(1.7346, 3, AwayFromZero), 2, AwayFromZero)
Run Code Online (Sandbox Code Playgroud)
(但不要认为这不仅仅是一个黑客).
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |