我有以下代碼:
def format_sizeof(num, suffix='', divisor=1000):
"""
Formats a number (greater than unity) with SI Order of Magnitude
prefixes.
Parameters
----------
num : float
Number ( >= 1) to format.
suffix : str, optional
Post-postfix [default: ''].
divisor : float, optional
Divisor between prefixes [default: 1000].
Returns
-------
out : str
Number with Order of Magnitude SI unit postfix.
"""
for unit in ['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z']:
if abs(num) < 999.5:
if abs(num) < 99.95:
if abs(num) < 9.995:
return '{0:1.2f}'.format(num) unit suffix
return '{0:2.1f}'.format(num) unit suffix
return '{0:3.0f}'.format(num) unit suffix
num /= divisor
return '{0:3.1f}Y'.format(num) suffix
我想要做的是對其進行調整,使其始終列印相同數量的數字,無論大小寫/單位如何,同時仍保持人類可讀性。
這是為了確保每次終端重繪 時列印相同的寬度。
我遇到了幾種方法,填充、字串型別轉換、math.log10。
我不確定解決這個問題的最佳方法是什么。
提前致謝。
uj5u.com熱心網友回復:
從關于字串格式的檔案中:
width是定義最小總欄位寬度的十進制整數,包括任何前綴、分隔符和其他格式字符。如果未指定,則欄位寬度將由內容決定。
的精度是指示多少位數應的小數點格式化與浮點值之后顯示的十進制數
'f'和'F',或之前和小數點用于與格式化的浮點值之后'g'或'G'。對于非數字型別,該欄位指示最大欄位大小 - 換句話說,欄位內容中將使用多少個字符。整數值不允許使用精度。
換句話說,對于帶有 的浮點數'g',width給出最小字符數,包括數字和小數點,precision給出最大數字數。
的寬度是在格式字串的點之前的數目。該精度是在格式字串后點的數量。
這是一個精度為 5(最多 5 位),寬度為 6(最少 5 位 1 個小數點)的示例:
>>> '{:6.5g}'.format(123.4567)
'123.46'
>>> '{:6.5g}'.format(12.34567)
'12.346'
>>> '{:6.5g}'.format(12.1)
' 12.1'
>>> '{:6.5g}'.format(12.0)
' 12'
uj5u.com熱心網友回復:
如果您想使用n數字列印一個數字(并且您確定不需要超過n):
from math import log10
x = 42
n = 5
print(format(x, f'{n}.{n-1-int(log10(x))}f'))
結果:
42.000
log10 與其他數學函式分開,所以相當優化,雖然因為你只對它的整數部分感興趣,你可能會變得更快一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399882.html
