如何根据某些条件将浮子的浮子四舍五入



我正在尝试制作一个加密货币机器人,我遇到了一个问题。我想根据交易所的数据来衡量余额,因为否则交易所不接受订单请求。例如,我的帐户包含0.0044485999999999995 BTC,而交换步骤Zize(圆形因子的奇特名称(为0.00000100,我如何获得0.004485而未舍入,因为交换将会出现错误。我尝试使用以下代码进行操作。但是不起作用

import sys, signal, json, time
import random
import math
num = 0.0044859999999999995
numCoins = num - math.fmod(num, 0.000001)
print (numCoins) # want to get 0.004485 `

您会更好地使用decimal.Decimal,而不是使用该语言的本机float类型,这很容易开始。

我还敢打赌,0.0044859999999999995 btc实际上是一个非常大的单位的大整数(不确定BTC,但对于ETH而言,这些单元被称为 wei (。

如果确实如此,那么您应该努力保持这种方式,并仅使用整数进行所有数学(即,甚至不仅是Decimal,只有普通的整数和//操作,并且在需要的任何地方(。

>

如果您坚持使用非企业值进行此操作,则可以将代码修改为:

from decimal import Decimal
from decimal import getcontext
from decimal import ROUND_DOWN
getcontext().prec = 100
getcontext().rounding = ROUND_DOWN
num = Decimal('0.0044859999999999995')
numCoins = Decimal(int(num*1000000))/1000000
from decimal import Decimal, ROUND_DOWN
num = Decimal('0.0044859999999999995')
numCoins = num.quantize(Decimal('0.000001'), rounding=ROUND_DOWN)
print(numCoins)  # Decimal('0.004485')

这应该适合您。

尝试以下:

>>> import decimal
>>> decimal.getcontext().rounding = decimal.ROUND_DOWN
>>> decimal.getcontext().prec = 28
>>> amount = decimal.Decimal('0.0044859999999999995')
>>> step = decimal.Decimal('0.00000100')
>>> rounded_amount=int(amount/step)*step
>>> print(rounded_amount)
0.00448500
>>> 

相关内容

  • 没有找到相关文章

最新更新