2012-02-13 4 views
2

Я использую десятичный модуль для больших чисел, но он превращается в научную нотацию для значений менее 0,00001. Есть ли способ отключить это так, чтобы все знаки после запятой показана:PyQt - как отключить научную нотацию в QLabel

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

«{0: F}». Формат (значение) не работает, поскольку он показывает все цифры, например, 0,0000100000 вместо 0,00001

Все, что я хочу, это показать 0.000000002 после округления 0,0000000015.

Я попытался

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

+0

@ user665327, я не уверен, что понимаю вас, но поместил необходимое количество цифр в '' {: .14f} '. Format (value) '. Тогда вам не нужно снимать конечные нули после десятичной точки в последней строке. – warvariuc

+0

Если я это сделаю, результат выглядит смешно: 0.00006660000000. У меня есть элемент управления spinner, который я использую для округления вывода. Итак, если после десятичной точки у меня больше 5 нулей, я хочу показать ее в стандартной форме, а не в научной, и не как выше. – linuxoid

0

'{0:f}'.format(value) не возвращает то, что вы хотите, потому что в float типа по умолчанию форматировщик обрезает фиксированного размера. Это не относится к самой Decimal, хотя:

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

По умолчанию формат используется 'g' из 'G', в зависимости от контекста.

+0

>>> '{0: f}'. Format (Десятичный ('0.0001000')) '0.0001000' – warvariuc