最近在做支付和退款的时候,发现一个因为python自带的float类型处理数据和预期结果不符,导致的错误。具体情况如下:
退款金额4.10 decimal类型
txn_amt = orderDict.get('txnAmt')
if isinstance(txn_amt, decimal.Decimal):
txn_amt = str(int(float(txn_amt) * 100))
在我用float处理之后,数据变成了409,这是由于python的float类型的精确度会到小数点后14位置
float(Decimal('4.02')) * 100
当我们这样输入的时候,预期返回值是402,但是实际返回值是:
401.99999999999994
所以,我在这里去掉了float的转义,然后就得到了预期的答案。
txn_amt = orderDict.get('txnAmt')
if isinstance(txn_amt, decimal.Decimal):
txn_amt = str(int(txn_amt * 100))
总结
在做数据的运算的时候,尽量不用float类型