第1,7346至1,74轮

use*_*275 3 .net c# rounding

我使用Math.Round(1.7346, 2, AwayFromZero)哪个应该给我1,74 - 但它实际上给了我1.73.

我知道是因为这个:

"由于将十进制值表示为浮点数或对浮点值执行算术运算可能导致精度损失,因此在某些情况下,Round(Double,Int32,MidpointRounding)方法可能看起来不会将中点值舍入为由mode参数指定.这在下面的示例中说明,其中2.135舍入到2.13而不是2.14.这是因为内部方法将值乘以10*位,并且在这种情况下乘法运算会受到精度损失的影响".

但是我应该使用哪种.NET方法来进行正确的舍入?

Fre*_*Foo 5

1.7346应该舍入到1.73,即使是AwayFromZero,因为这只会改变"当一个数字介于两个其他人之间时"的舍入行为(例如,如果它是1.735).

您可以使用获得所需的行为

Math.Round(Math.Round(1.7346, 3, AwayFromZero), 2, AwayFromZero)
Run Code Online (Sandbox Code Playgroud)

(但不要认为这不仅仅是一个黑客).

  • @ user1083275不.当舍入到两个十进制数字时,我们(欧洲人)只考虑前三个十进制数字并省略其余数字.在你的情况下,我们只看一看`1.734`并决定由于'4`,舍入值为`1.73`.在舍入中,您不需要多次迭代.当你舍入到'n`十进制数字时,你的决定只取决于`(n + 1)`十进制数字的值 (3认同)