PyQt - как отключить научную запись в QLabel - PullRequest
3 голосов
/ 13 февраля 2012

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

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)

Но он все равно преобразует его в научную нотацию

Спасибо.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Я не смог найти лучшего решения, чем это:

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 голосов
/ 13 февраля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...