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
理解浮点数精度:8/3的神奇输出
探讨浮点数a=8/3的精度问题,观察Python中输出的近似值,解析单精度float的6-7位有效数字限制,比较decimal模块提升后的精度,并揭示背后的小数表示原理。
6744

被折叠的 条评论
为什么被折叠?



