簡體   English   中英

如何將浮點數打印到 n 個小數位,包括尾隨 0?

[英]How to print float to n decimal places including trailing 0s?

即使結果有許多尾隨 0,我也需要將浮點數打印或轉換為 15 位小數位字符串,例如:

1.6 變成 1.6000000000000000

我試過 round(6.2,15) 但它返回 6.2000000000000002 添加一個舍入錯誤

我還在網上看到很多人將浮點數放入字符串中,然后手動添加尾隨 0,但這似乎很糟糕......

做這個的最好方式是什么?

對於 2.6+ 和 3.x 中的 Python 版本

您可以使用str.format方法。 例子:

>>> print('{0:.16f}'.format(1.6))
1.6000000000000001

>>> print('{0:.15f}'.format(1.6))
1.600000000000000

注意1在第一實施例的端部被舍入誤差; 這是因為十進制數 1.6 的精確表示需要無限數量的二進制數字。 由於浮點數的位數是有限的,因此該數字會四舍五入為附近但不相等的值。

對於 2.6 之前的 Python 版本(至少回到 2.0)

您可以使用“模格式”語法(這也適用於 Python 2.6 和 2.7):

>>> print '%.16f' % 1.6
1.6000000000000001

>>> print '%.15f' % 1.6
1.600000000000000

現代 Python >=3.6最簡潔的方法是使用帶有字符串格式的 f 字符串

>>> var = 1.6
>>> f"{var:.15f}"
'1.600000000000000'

浮點數缺乏將“1.6”精確表示到那么多小數位的精度。 舍入誤差是真實的。 你的數字實際上不是 1.6。

查看: http : //docs.python.org/library/decimal.html

我想這本質上是把它放在一個字符串中,但這避免了舍入錯誤:

import decimal

def display(x):
    digits = 15
    temp = str(decimal.Decimal(str(x) + '0' * digits))
    return temp[:temp.find('.') + digits + 1]

我們可以使用format()在小數位后打印數字。 取自http://docs.python.org/tutorial/floatingpoint.html

>>> format(math.pi, '.12g')  # give 12 significant digits
'3.14159265359'

>>> format(math.pi, '.2f')   # give 2 digits after the point
'3.14'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM