Я создал функцию, которая преобразует число в научной нотации c в ту, которая использует префиксы, например, где e-3 = m, e3 = k et c
Вот код (I добавьте дополнительные 0 к тем, у которых длина меньше 9 по причинам форматирования):
def convertExpToSI(size):
if (abs(size) >= 1):
if (abs(size) > 1e+31):
return "{:.3e}".format(size)
else:
for x in [' ', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y', 'R', 'Q']:
if abs(size) < 1000.0:
y = "%3.3f %s" % (size, x)
if (len(y) == 7):
y = '00' + y
return y
elif (len(y) == 8):
y = '0' + y
return y
else:
return y
size /= 1000.0
if (abs(size) < 1):
if (abs(size) < 1e-31):
return "{:.3e}".format(size)
else:
for x in [' ', 'm', 'u', 'n', 'p', 'f', 'a', 'z', 'y', 'r', 'q']:
if abs(size) > 0.001:
y = "%3.3f %s" % (size, x)
if (len(y) == 7):
y = '00' + y
return y
elif (len(y) == 8):
y = '0' + y
return y
else:
return y
size /= 0.001
И это работает, но в некоторых случаях я чувствую, что это можно улучшить, но мои попытки не увенчались успехом.
В настоящее время с входом print(convertExpToSI(2.855e-06))
вывод 000.003 m
.
Но также это можно записать как 2.855 u
, что будет лучше, если будет сохранено больше данных.
Что меня больше смущает, так это то, что это работает с числами больше 1. print(convertExpToSI(2.855e+06))
дает 002.855 M
, что является правильным и показывает больше данных.
Любая помощь в этом с благодарностью, спасибо!