gpt4 book ai didi

vb.net - VB.Net中的Math.Round()有什么问题?

转载 作者:行者123 更新时间:2023-12-03 14:32:56 26 4
gpt4 key购买 nike

我在VB.Net中的Math.Round函数中遇到了一个奇怪的情况

Math.Round((32.625), 2)


结果:32.62

Math.Round((32.635), 2)


结果:32.64

我需要32.63,但是在这种情况下,该函数在不同的逻辑下工作。

我可以得到小数部分,然后做我想做的事情。但这不是太怪异了,一个是四舍五入,一个是四舍五入。

那么如何从32.625中获得32.63而又不弄乱小数部分呢? (作为数学的自然逻辑)

最佳答案

Math.Round默认使用银行家的四舍五入。您可以通过指定其他MidPointRounding选项来更改它。从MSDN

四舍五入


中点值四舍五入到零以外的下一个数字。对于
例如,3.75舍入到3.8,3.85舍入到3.9,-3.75舍入到-3.8,
-3.85四舍五入到-3.9。这种舍入形式由
MidpointRounding.AwayFromZero枚举成员。四舍五入
零是最广为人知的舍入形式。


四舍五入到最接近的值或银行的四舍五入


中点值四舍五入到最接近的偶数。例如,
3.75和3.85均四舍五入至3.8,-3.75和-3.85均四舍五入
-3.8。这种舍入形式由MidpointRounding.ToEven枚举成员表示。

四舍五入到最接近是金融中使用的标准舍入形式
和统计操作。符合IEEE标准754,第
4.当在多个舍入运算中使用时,它减少了由于始终舍入中点值而导致的舍入误差。
单向。在某些情况下,此舍入误差可能是
重大。


因此,您想要的是:

Math.Round(32.625, 2, MidpointRounding.AwayFromZero)
Math.Round(32.635, 2, MidpointRounding.AwayFromZero)


正如其他人提到的那样,如果精度很重要,则应使用 Decimal变量而不是浮点类型。例如:

Math.Round(32.625D, 2, MidpointRounding.AwayFromZero)
Math.Round(32.635D, 2, MidpointRounding.AwayFromZero)

关于vb.net - VB.Net中的Math.Round()有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14835001/

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