修復Decimal到兩個地方的語法到底是怎麼回事?是否有一種更具可讀性或Pythonic方式將Decimal格式化爲2個位置?
>>> from decimal import Decimal
>>> num = Decimal('1.0')
>>> num.quantize(Decimal(10) ** -2) # seriously?!
Decimal('1.00')
有沒有更好的方式看起來不那麼深奧? 「量化小數點」聽起來像是來自「星際迷航」劇集的技術可能性!
修復Decimal到兩個地方的語法到底是怎麼回事?是否有一種更具可讀性或Pythonic方式將Decimal格式化爲2個位置?
>>> from decimal import Decimal
>>> num = Decimal('1.0')
>>> num.quantize(Decimal(10) ** -2) # seriously?!
Decimal('1.00')
有沒有更好的方式看起來不那麼深奧? 「量化小數點」聽起來像是來自「星際迷航」劇集的技術可能性!
使用字符串格式化:
>>> from decimal import Decimal
>>> num = Decimal('1.0')
>>> format(num, '.2f')
'1.00'
的format()
function適用字符串格式化到值。 Decimal()
對象可以像浮點值一樣進行格式化。
您也可以用它來插值格式化的十進制值是一個較大的字符串:
>>> 'Value of num: {:.2f}'.format(num)
'Value of num: 1.00'
見format string syntax documentation。
除非你確切地知道你在做什麼,否則通過量化來擴展有效數字的數量是不可行的。量化是會計軟件包的祕密,通常旨在將結果舍入到而不是有效數字。
量化用於設置實際在內部保存的值的位數,然後將其轉換爲字符串。正如Martijn指出的,這通常是通過舍入來完成減少的位數,但它的工作原理與其他方式一樣。通過將目標指定爲十進制數而不是多個位置,可以使兩個值匹配,而不必知道具體位置。
如果您使用十進制值,而不是直接嘗試計算它看起來有點不太深奧:
num.quantize(Decimal('0.01'))
您可以設置一些常量隱藏的複雜性:
places = [Decimal('0.1') ** n for n in range(16)]
num.quantize(places[2])
我我不知道我在閱讀文檔後是否能夠理解'quantize()'。這只是用來設置精度? –
不,它用於結果輪次以匹配另一個值的指數,我認爲主要用於會計。 –
我認爲這會變成對'__format__'的調用? –