面试题答案
一键面试精度问题示例
在Python中,由于浮点数在计算机中是以二进制存储的,某些十进制小数无法精确表示为二进制小数,从而在运算时因类型自动提升出现精度问题。例如:
a = 0.1
b = 0.2
print(a + b)
按照数学运算,0.1 + 0.2
应该等于 0.3
,但实际输出为 0.30000000000000004
。这是因为 0.1
和 0.2
都不能精确表示为二进制小数,在类型自动提升进行加法运算时,就产生了精度误差。
解决方法
- 使用
decimal
模块:decimal
模块提供了十进制浮点运算支持,可以避免浮点数运算的精度问题。
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b)
这里将字符串形式的小数传入 Decimal
构造函数,运算结果会是精确的 0.3
。
- 使用
round
函数进行四舍五入:对于一些对精度要求不是特别高的场景,可以使用round
函数对结果进行四舍五入。
a = 0.1
b = 0.2
result = round(a + b, 1)
print(result)
round
函数的第二个参数指定保留的小数位数,这里保留一位小数,输出为 0.3
。但这种方法只是对结果进行近似处理,并非真正解决精度问题。