将数据转换为时decimal,我有时会得到不正确的结果:
from decimal import *
D = Decimal
>>> D(5.2).quantize(D('.00000'), rounding=ROUND_DOWN)
Decimal('5.20000')
>>> D(5.3).quantize(D('.00000'), rounding=ROUND_DOWN)
Decimal('5.29999')
Run Code Online (Sandbox Code Playgroud)
我不认为浮点不精确是一个借口,因为我使用专门的类来处理数字!引自pyton docs:
Decimal"基于浮点模型,它是为人们设计的,并且必然具有最重要的指导原则 - 计算机必须提供与人们在学校学习的算法相同的算法." - 摘录自十进制算术规范
这有效:
x=round(x - .0000049,5)
D(str(x) + (5-len(str(x).split('.')[1]))*'0')
Run Code Online (Sandbox Code Playgroud)
Kev*_*vin 10
因为5.3它本身已经错了.当你传递给它时Decimal(),它不会神奇地修复它.您需要Decimal()从一开始就在每一步使用.这意味着写Decimal('5.3')而不是Decimal(5.3).
编辑:OP已声明他们正在使用JSON.以下是从JSON解析Decimal的方法:
import json, decimal
decimal_decoder = json.JSONDecoder(parse_float=decimal.Decimal)
parsed_json = decimal_decoder.decode(raw_json)
Run Code Online (Sandbox Code Playgroud)
(raw_jsonJSON作为字符串在哪里).这将产生正确的小数.