преобразовать отрицательную научную запись 1.3E-2 в плавающее? - PullRequest
0 голосов
/ 31 января 2019

Я понимаю, что могу преобразовать число в научной нотации в число с плавающей точкой с float следующим образом:

>>> x = 1.3e8
>>> float(x)
130000000.0

Тогда, почему я не могу сделать то же самое с отрицательным показателем степени?

>>> x = 1.3e-8
>>> x
1.3e-08
>>> float(x)
1.3e-08

Я бы ожидал, что в последнем случае float(x) даст 0.000000013

Ответы [ 3 ]

0 голосов
/ 31 января 2019

1.3e-8 - это литерал с плавающей точкой (т. Е. Он непосредственно создает объект float), поэтому вам не нужно заключать его в float().Оболочка Python просто возвращает строковое представление по умолчанию для числа с плавающей точкой.Для принудительного обозначения с фиксированной точкой вы можете использовать str.format(), хотя вам может потребоваться указать точность:

>>> '{:.9f}'.format(1.3e-8)
'0.000000013'
0 голосов
/ 31 января 2019

Следующая функция имеет дело с произвольным числом чисел с плавающей запятой.

def displayfloat(x):
    # format numbers > 1.
    if str(x).find('+') > -1:
        return '{:.1f}'.format(x)
    e_idx = str(x).find('e')
    # format numbers > 1e-05
    if e_idx == -1:
        return str(x)
    # format numbers < 1e-05
    minus_idx = str(x).find('-')
    shift = e_idx
    if str(x).find('.') > -1:
        shift -= 1
    decimalpoints = -int(str(x)[str(x).find('-'):]) - 1 + shift
    floatformat = '{:.'+str(decimalpoints)+'f}'
    return floatformat.format(x)
# exmaples
displayfloat(1e-5) # --> '0.00001'
displayfloat(1.1e-5) # --> '0.000011'
displayfloat(1e+5) # --> '100000.0'
0 голосов
/ 31 января 2019

Это уже поплавок, он просто представлен в научной записи

print(type(1.3e8)) # <class 'float'>
print(type(1.3e-8)) # <class 'float'>
print(0.000000013)  # 1.3e-08
...