Python如何将数字四舍五入到一位小数?(8.25需得8.3)
解决Python中8.25四舍五入到1位小数的预期不符问题
问题原因
这是因为二进制浮点数的精度限制:十进制的8.25看似是精确值,但在二进制浮点数体系中无法被精准存储,实际内存里的近似值略小于8.25(比如8.249999999999999)。调用round()或格式化字符串时,会基于这个近似值计算,最终得到8.2而非你期望的8.3。
可靠解决方案:使用decimal模块
如果需要严格遵循十进制四舍五入规则,推荐用Python标准库的decimal模块,它支持精确的十进制算术运算,彻底规避浮点数精度问题:
from decimal import Decimal, ROUND_HALF_UP # 用字符串传入数字,确保十进制精度不丢失 num = Decimal("8.25") # 指定保留1位小数,采用ROUND_HALF_UP规则(即常规四舍五入:≥0.05则进1) rounded_num = num.quantize(Decimal("0.1"), rounding=ROUND_HALF_UP) print(rounded_num) # 输出 8.3
这个方法适配所有整数或多位小数场景:
- 处理
8.35时,会正确得到8.4 - 处理整数
5时,会得到5.0
关于“加0.05后截取”方法的问题
你考虑的加0.05再截取的方法存在明显漏洞:
- 对于
8.24,加0.05后是8.29,截取1位小数会得到8.3,这违背了四舍五入规则(原数应舍为8.2) - 同样受浮点数精度影响,
8.35加0.05后可能变成8.399999999999999,截取后得到8.3,依然不符合预期
因此不推荐使用这种方法。
内容的提问来源于stack exchange,提问作者Vatana Chea
相关产品推荐
相关产品推荐

