python
中如果小数非常多的话,会导致使用科学技术法。
但是,在某些场景中,使用科学技术法会出现一些错误,这里为不使用科学技术法,输出小数。
参考资料
先说一下局限性。
- 如果遇到小数点尾数很多,本文介绍的方法有可能会精度错误
- 尝试使用了
Decimal
,可能是自身原因,并没有有效解决问题,后续可能会继续使用这个进行修正- 另外,使用
Decimal
会降低速度
- 另外,使用
如果指数大于 15
或小于 -4
,则用科学计数法表示 float
的 repr
:
>>> n = 0.000000054321654321
>>> n
5.4321654321e-08 # scientific notation
如果使用 str
,则生成的字符串再次采用科学计数法:
>>> str(n)
'5.4321654321e-08'
我最终使用下面的方法,来保持非科学计数法输出小数
price = '{:.15f}'.format(price)
要是想要去除后面的 0 可以
print('{:.15f}'.format(0.000000919).rstrip('0'))
但是,使用上面的方法,对某些数依然会有精度不准确的情况。