为什么数学运算符不能正确舍入值?

4

当我尝试对数值进行四舍五入时,结果不同。请观察以下输出。它仅针对奇数进行四舍五入。我做错了什么?

PS C:\> [math]::Round(1.5)
2

PS C:\> [math]::Round(2.5)
2

PS C:\> [math]::Round(3.5)
4

PS C:\> [math]::Round(4.5)
4

PS C:\> [math]::Round(5.5)
6

PS C:\> [math]::Round(6.5)
6

1
可能是PowerShell [Math]::Round sometimes not rounding?的重复问题。 - user6811411
2
@LotPings - 看起来更像是采用银行家舍入的数学。 - Lieven Keersmaekers
请查看此解释以获得更清晰的说明! - Vivek Kumar Singh
1
或者您可以使用字符串格式N0,例如"{0,N0}" -f 2.5(2.5).ToString('N0') - user6811411
1个回答

6

[math]使用银行家舍入法

来自《四舍五入数字PowerShell风格》评论部分

...这意味着数字被舍入到最接近的偶数。这不遵循我学过的数学舍入规则,其中以5结尾的数字总是向上舍入到下一个更高级别的数字。要让Round函数按照我们大多数人学习的数学规则行事,您可以使用额外的AwayFromZero开关 (Dan Sheehan).

如果您始终想要向上舍入,可以使用AwayFromZero

[math]::Round(2.5, 0, [System.MidpointRounding]::AwayFromZero)

我正要发布相同的链接,加上“.001”可能更容易/更短。 - user6811411
确实更短,但使用AwayFromZero使意图更明确,至少给你一些可以搜索的东西;)(这对我来说是新的) - Lieven Keersmaekers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接