2012-02-13 16 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

私は、この優れた解決策を見つけることができませんでした:float型のデフォルトフォーマッタが固定サイズで切り捨てているため

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

+0

@ user665327、私はあなたを理解しているとは思えませんが、必要な桁数を ''{:.14f}'。format(value)'に入れてください。次に、最後の行の小数点の後に末尾のゼロを取り除く必要はありません。 – warvariuc

+0

これを行うと、出力はばかげて見えます:0.00006660000000。出力を切り捨てるために使用するスピナーコントロールがあります。したがって、小数点以下5桁以上のゼロがある場合、私はそれを科学的ではなく標準的な形で示したいと思います。 – linuxoid

0

'{0:f}'.format(value)はあなたが望むものを返しません。これは、しかし、Decimal自体には当てはまらない:デフォルトで

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

は、使用される形式は、文脈に応じて、'G''g'です。

+0

>>> '{0:f}'形式(10進数( '0.0001000')) '0.0001000' – warvariuc

関連する問題