如何对金额保留四位小数并向下取整?Python场景示例
Python中对金额保留四位小数并向下取整的方法
方法一:使用math.floor实现
利用地板取整的特性,先将数值放大10000倍(对应四位小数),取整后再缩小回原比例:
import math price = 0.6096689733333334 four_digits = math.floor(price * 10000) / 10000 print(four_digits) # 输出 0.6096
注意:由于浮点数本身的精度限制,极端情况下可能出现微小误差,如果是处理金额这类对精度要求极高的场景,更推荐下面的方法。
方法二:使用decimal模块(推荐用于金额计算)
decimal模块专门用于精确的十进制运算,可以直接指定舍入模式为向下取整:
from decimal import Decimal, ROUND_FLOOR price = Decimal('0.6096689733333334') four_digits = price.quantize(Decimal('0.0000'), rounding=ROUND_FLOOR) print(four_digits) # 输出 0.6096
初始化Decimal时建议传入字符串而非浮点数,避免浮点数精度带来的潜在问题。
原代码不符合需求的原因
你使用的'{:.4f}'.format()默认采用四舍五入规则,所以会把0.60966...近似为0.6097,而上述两种方法都是强制对第四位小数之后的部分进行向下取整,能满足计算结果总和不超过原价格的要求。
内容的提问来源于stack exchange,提问作者mark kazakov
相关产品推荐
相关产品推荐

