float的精度是有限的。
a = 8/3
print(a)
输出结果为:2.6666666666666665
,最后一位为什么不对呢?
我们查看下 a 的类型:
a = 8/3
print(type(a))
输出结果为:<class 'float'>
,即 a 的类型为浮点型。
我们不妨做个有意思的实验,直接输出小数点后50位:
a = 8/3
print('%0.50f'%a)
输出结果为:
2.66666666666666651863693004997912794351577758789062
那如果我们只精确到小数点后5位呢?
a = 8/3
print('%0.5f'%a)
输出结果为:2.66667
,四舍五入,完美。
一般来说,单精度的浮点型 float,小数点后的有效数字在6~7位。
我们可以使用 decimal
来提升精度:
import decimal
a = decimal.Decimal(8) / decimal.Decimal(3)
print(a)
输出结果为:2.666666666666666666666666667