2012-02-13 104 views
2

我對大數使用Decimal模塊,但對於小於0.00001的值,它變成科學記數法。有沒有什麼辦法來禁用該讓所有的小數位顯示:PyQt - 如何在QLabel中禁用科學記數法

round(Decimal(str(value)), 9) 

「{0:F}」。格式(值)不起作用,因爲它顯示了所有的數字,例如0.0000100000而不是0.00001

我想要的是在四捨五入後0.0000000015顯示0.000000002。

我試圖

def set_decimals(self, value, decimals): 
    val = '{0:f}'.format(Decimal(str(value))) 
    rnd_value = round(Decimal(val), decimals) 
    return str(rnd_value) 

但它仍然將其轉換爲科學記數法

感謝。

回答

1

我無法找到一個更好的解決方案則是:

def regularNotation(value): 
    """Sometimes str(decimal) makes scientific notation. This function makes the regular notation.""" 
    v = '{:.14f}'.format(value).rpartition('.') # 14 digits in fractional part 
    return v[0] + (v[1] + v[2]).rstrip('.0') # strip trailing 0s after decimal point 
+0

是不是有更簡單的一個雙數,並顯示所有必需的小數位? – linuxoid 2012-02-14 00:46:18

+0

@ user665327,我不確定我是否理解你,但在''{:.14f}'格式(值)'中輸入所需的數字。那麼你不需要在最後一行中的小數點後面去掉尾隨零。 – warvariuc 2012-02-14 08:16:58

+0

如果我這樣做,輸出看起來很荒謬:0.00006660000000。我有一個微調控件,我用它來控制輸出。所以,如果我在小數點後有5個以上的零,我想以標準形式顯示它,而不是科學的,也不像上面那樣。 – linuxoid 2012-02-14 11:44:39

0

'{0:f}'.format(value)不回你想要什麼,因爲float類型的默認格式截斷爲固定大小。這不是Decimal本身的情況下,雖然:

>>> '{0:f}'.format(Decimal(str(0.0000000000000001))) 
'0.0000000000000001' 

默認情況下,使用的格式是'G''g',根據上下文。

+0

>>>'{0:f}'中的函數格式(小數('0.0001000')) '0.0001000' – warvariuc 2012-02-13 18:10:44