建议的舍入货币值的方法

时间:2009-02-20 12:29:07

标签: delphi

首先看到以下问题:

SetRoundMode(rmUp) and rounding “round” values like 10, results in 10,0001.

我需要向上舍入货币值,因此0.8205变为0.83,但上面显示的SimpleRoundTo行为让我感到头疼。

如何以安全的方式提升货币价值?

3 个答案:

答案 0 :(得分:6)

您可以使用Ceil功能:

newvalue := Ceil(oldvalue * 100) / 100;

答案 1 :(得分:3)

请注意,将0.8205四舍五入至0.83,并将0.8305四舍五入至0.84,将导致您的四舍五入中的平均偏差。默认的舍入模式是银行家舍入,向均数舍入以避免方向偏差。

如果您的计算存在双重输入性质,这一点尤为重要。采用方向偏差进行舍入可能会导致两侧不匹配。

使用SetRoundMode更改FPU控制字。请注意,在考虑Currency类型(这是一种定点类型(缩放的64位整数))时,这种FPU模式舍入应用于浮点运算,这种情况可能并不明显。中间浮点计算中的一个小不精确,例如82.000000000000001,即使预计Currency的值为82.00,也会最终四舍五入。更改线程全局舍入模式只需要谨慎。

答案 2 :(得分:1)

你做错了。

不要使用花车来代表时间和金钱等重要类型!

使用表示所需最高精度的整数。例如,使用表示1000分的整数。那么你可以绕过82050左右,当你最终需要将它显示为一个字符串然后只有才能使用整数计算进行舍入。

要真正回答您的问题,不应该将0.8205美元四舍五入。 $ 0.825应该是。