vb.net中的数学舍入?

vb.net中的数学舍入?,vb.net,financial,calc,Vb.net,Financial,Calc,我在vb.net中有一个内置函数用于正确的数学舍入吗 例如,下面的两个函数都返回14.00,但它们应该返回14.01: Math.Round(14.004999, 2, MidpointRounding.AwayFromZero) Decimal.Round(14.004999, 2, MidpointRounding.AwayFromZero) 还有其他方法可以进行适当的数学舍入吗?这将产生期望的结果,但是 Dim somedata As Double = 14.004999 Dim out

我在vb.net中有一个内置函数用于正确的数学舍入吗

例如,下面的两个函数都返回14.00,但它们应该返回14.01:

Math.Round(14.004999, 2, MidpointRounding.AwayFromZero)
Decimal.Round(14.004999, 2, MidpointRounding.AwayFromZero)

还有其他方法可以进行适当的数学舍入吗?

这将产生期望的结果,但是

Dim somedata As Double = 14.004999
Dim outd As Double

outd = Math.Round(somedata, 3)
outd = Math.Round(outd, 2, MidpointRounding.AwayFromZero)

你想要的是天花板,而不是圆形

Dim d As Decimal = 14.004999
Dim r As Decimal = Math.Ceiling(d * 100D) / 100D

在计算中增加1/2美分:

Dim x As Decimal = 14.004999D

Dim y as Decimal = Decimal.Round(x + 0.005D, 2, System.MidpointRounding.AwayFromZero)

在金融数学中一定要使用
Decimal
类型,而不是
Double
类型。

为什么你认为答案应该以.01结尾?您将四舍五入到两位小数,第三位小数是4。如果您希望它总是四舍五入,因为
AwayFromZero
,请注意枚举的名称-
中点四舍五入
,它只适用于正好是四舍五入的值,否则,四舍五入通常不会总是四舍五入。但我希望整个数字都考虑在内。所以在我的例子中,9会被带入,所以整个舍入过程会是这样的:14.004999->14.005->14.01我希望我现在把自己弄清楚了:)这不是舍入的工作方式
.004999
小于
0.005
,因此将向下舍入。您是对的。我想我已经在财务计算中呆了太久,忘记了真正的数学是如何工作的:D
“适当的数学舍入”
没有使用上限。天花板将始终向上舍入,而适当的数学舍入是例如:
0.5->1
0.4->0
。如果我错了,请纠正我:你说14.004999应该四舍五入到14.01,但是.0049低于.005,因此它四舍五入到0,你得到14.00,如果你想要它是14.01,你只需要四舍五入就可以了。我哪里错了?不,我从来没说过。我说
0.5
应该四舍五入到
1
0.4
0
。这是他想要的两个四舍五入的例子。然而,上限总是向上取整,这意味着如果他的输入是动态的,这就不会起作用。