OP хотел бы удалить лишние нули и сделать полученную строку максимально короткой.
Я считаю, что экспоненциальное форматирование% g сокращает результирующую строку для очень больших и очень малых значений. Проблема возникает для значений, которые не нуждаются в экспоненциальной записи, например 128.0, которая не является ни очень большой, ни очень маленькой.
Вот один из способов форматирования чисел в виде коротких строк, использующий экспоненциальную запись% g, только когда Decimal.normalize создает слишком длинные строки. Возможно, это не самое быстрое решение (поскольку оно использует Decimal.normalize)
def floatToString (inputValue, precision = 3):
rc = str(Decimal(inputValue).normalize())
if 'E' in rc or len(rc) > 5:
rc = '{0:.{1}g}'.format(inputValue, precision)
return rc
inputs = [128.0, 32768.0, 65536, 65536 * 2, 31.5, 1.000, 10.0]
outputs = [floatToString(i) for i in inputs]
print(outputs)
# ['128', '32768', '65536', '1.31e+05', '31.5', '1', '10']