gpt4 book ai didi

.net - VB.Net 为什么 Math.Round 将 5 舍入到最接近的偶数,我该怎么办?

转载 作者:行者123 更新时间:2023-12-04 14:01:14 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does .NET use banker's rounding as default?

(5 个回答)


7年前关闭。




为什么 Math.Round(0.125, 2) 四舍五入为 0.12?

Dim foo As Decimal
foo = Math.Round(0.125, 2)

foo 现在是 0.12 但它应该是 0.13

我听说这是因为 .Net 中的一些标准四舍五入到最接近的偶数,但这只是数学不好。 12.5 将四舍五入为 12,但 13.5 将四舍五入为 14。有没有办法解决这个问题?

最佳答案

来自 documentationMath.Round(decimal)方法:

If the fractional component of d is halfway between two integers, one of which is even and the other odd, the even number is returned.


相同的逻辑适用于 Math.Round(decimal, int)重载。注意:
Math.Round(0.125, 2) // 0.12
Math.Round(0.135, 2) // 0.14
Math.Round(0.145, 2) // 0.14
这不是“糟糕的数学”;这是一种常见的舍入策略,称为“舍入到偶数”。来自 Wikipedia :

This variant of the round-to-nearest method is also called unbiased rounding, convergent rounding, statistician's rounding, Dutch rounding, Gaussian rounding, odd-even rounding, bankers' rounding or broken rounding, and is widely used in bookkeeping.

This is the default rounding mode used in IEEE 754 computing functions and operators.


如果你想更好地控制它的舍入方式,你可以指定一个 MidpointRounding范围
Math.Round(0.125, 2, MidpointRounding.AwayFromZero) // 0.13

关于.net - VB.Net 为什么 Math.Round 将 5 舍入到最接近的偶数,我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20616930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com