如何正确地舍入一半的十进制数?

时间:2018-04-11 23:20:28

标签: python math decimal rounding

我试图将数字减半,但我的计划不想将一半减半而是向上。

例如,我有0.0498512222 我想要得到0.049,但是程序围绕一半,给我0.050

代码

#!/usr/bin/python
import sys, signal, json, time
import random
import decimal
from decimal import Decimal, ROUND_HALF_DOWN
num = 0.049852124
num = Decimal(num)
numCoins = Decimal(num.quantize(Decimal('0.001'), rounding=ROUND_HALF_DOWN))
numCoins = float(numCoins)
print numCoins

我不知道如何解决此错误,因为它适用于加密货币机器人,numCoins是我拥有的硬币数量。如果程序向上一半,我会收到一个错误,例如“帐户余额不足以应对所请求的操作”,因为我销售的产品不能超过我的产品。

2 个答案:

答案 0 :(得分:1)

ROUND_HALF_DOWN是圆形 向下,就像一个数字正好在两个选项中间的一半,它向下舍入。其他一切都绕到最近。你明显高于0.049和0.050之间的中间点,所以你四舍五入到最接近的位置。

如果要将所有内容向下舍入,那就是ROUND_DOWN,而不是ROUND_HALF_DOWN。

另外,如果你想要十进制算术,从一开始就使用浮点数就是一个错误。而不是num = 0.049852124,你应该使用完全使用num = Decimal('0.049852124')之类的避免浮点数,并且你应该避免在最后生成浮点数。

答案 1 :(得分:0)

这样的东西?

import sys, signal, json, time
import random
import math
num = 0.049852124 
# where 1 is in the position you want to truncate
numCoins = num - math.fmod(num, 0.001)
print numCoins # 0.049