python - 格式化功能垫不一致
问题描述
格式功能在 16 点精度后无法正常工作
>>> '{0:.17}'.format(0.10555584)
'0.10555584'
>>> '{0:.17}'.format(0.10555584124567896)
'0.10555584124567896'
>>> '{0:.26}'.format(0.10555584124567896)
'0.10555584124567896076030138'
>>> '{0:.18}'.format(0.10555584124567896)
'0.105555841245678961'
>>> '{0:.18}'.format(0.10555584124567896)
'0.105555841245678961'
>>> '{0:.18}'.format(0.10555584124567)
'0.105555841245669996'
>>> '{0:.18}'.format(0.10)
'0.100000000000000006'
>>> '{0:.17}'.format(0.10)
'0.10000000000000001'
>>> '{0:.16}'.format(0.10)
'0.1'
>>> '{0:.15}'.format(0.10)
'0.1'
>>> '{0:.17}'.format(0.12345678901234567)
'0.12345678901234566'
>>> '{0:.17}'.format(0.1234567890123456)
'0.12345678901234559'
>>> '{0:.17}'.format(0.123456789012345678)
'0.12345678901234568'
>>> '{0:.17}'.format(0.12345678901234567)
'0.12345678901234566'
是否有任何解决方法或其他方法可以更高精度地工作。
解决方案
这不是格式问题,而是浮点数表示的问题。当前所有计算机都使用IEEE 754,并且双精度(64 位)float
的精度约为 16 位。
确实有一些方法可以处理任意精度的十进制数。这就是十进制模块的用途:
>>> import decimal
>>> d = decimal.Decimal('0.12345678901234567890123456789')
>>> d
Decimal('0.12345678901234567890123456789')
>>> '{0:.17}'.format(d)
'0.12345678901234568'
>>> '{0:.26}'.format(d)
'0.12345678901234567890123457'
>>> str(d)
'0.12345678901234567890123456789'
推荐阅读
- python - 使用带有单元格边框的 2.color_scale 导出 excel
- mysql - 考虑到高性能,使用 sql 获得所需的输出?
- python - 熊猫特定条件下的 pd.eval()
- python - Web Scraping:试图检索所有歌曲,但它只返回一首歌词
- python - 用于识别 NumPy 数组中的数组的方法
- android - React-native Axios 在 iOS 中工作,但在 Android 中不调用
- keras - 增强 keras 模型输出并作为第二个模型的输入
- php - 我在 Laravel 中的搜索功能有问题
- python - python 和 celery:覆盖硬超时以与 gevent 池一起使用
- azure-cognitive-search - 如何获取至少包含一个完整单词的 Azure 搜索结果?