Как преобразовать число с плавающей запятой в XE-Y для любого числа с плавающей запятой - PullRequest
1 голос
/ 04 мая 2019

Я анализирую файл, который содержит строки с плавающей точкой, разделенные пробелом, в формате: +/- 0.XXXE-8 после чтения поплавков и сохраняет их в списке, он меняется на +/- X.XXXE-9.

Я пытаюсь напечатать число как +/- 0.XXXE-8 (тот же формат, в котором я его читал), но безуспешно.

Пример строки из входного файла:

0.43578E-08  0.48992E-08  0.54452E-08  0.59816E-08  0.64918E-08  0.69577E-08

Вывод на печать строки после ее прочтения:

4.357800e-09 4.899200e-09 5.445200e-09 5.981600e-09 6.491800e-09 6.957700e-09

Есть ли способ преобразовать любое число с плавающей запятой, которое будет представлено как 0.XXXE-8, независимо от того, какое это число, например:

x = 1.3E-9
print(func(x)) -> 0.13E-8

был бы признателен за помощь

Спасибо

1 Ответ

1 голос
/ 04 мая 2019

Вы уже поняли, что числовые значения идентичны.

Так что это просто проблема отображения, которую вы можете обойти, отформатировав их самостоятельно:

data = [0.43578E-08, 0.48992E-08, 0.54452E-08, 0.59816E-08, 0.64918E-08, 0.69577E-08]

def format_float_weirdly(myfloat):
    """Formats a float to 0.xxxxxxxe-08 if it would be presened as x.xxxxxxe-09
    when normally formatted. If not, the normal format is outputted.""" 
    float_String = f"{myfloat:.8n}"
    if float_String[1] == "." and float_String.endswith("e-09"):
        float_String = "0." + float_String.replace(".","").replace("e-09","e-08")
    return float_String


d2 = [format_float_weirdly(f) for f in data]
print(data)
print(d2)

Выход:

# printout of data
[4.3578e-09, 4.8992e-09, 5.4452e-09, 5.9816e-09, 6.4918e-09, 6.9577e-09]

['0.43578e-08', '0.48992e-08', '0.54452e-08', '0.59816e-08', '0.64918e-08', '0.69577e-08']

Вы можете адаптировать это, чтобы соответствовать «любому» другому представлению, выполняя некоторые математические и строковые срезы в «нормальном строковом представлении». Afaik нет встроенного способа «форматировать» плавающее число, как вы хотите, с помощью обычного форматирования строк означает.

...