Я борюсь здесь lol
Я работаю над функцией, которая принимает длинное число, преобразует его в строку, а затем форматирует в стандартный формат США (т.е. с 42509348509 до 42 509 348 509). Это работает отлично ... если у меня нет десятичного числа и числа, которое больше, чем нравится функция (число варьируется), тогда я начинаю получать научные ответы c.
Вот эта функция, какая она есть сейчас:
def format_number(num):
num = str(num)
decimal = ''
if '.' in num:
parts = num.split('.')
num = parts[0]
decimal = parts[1]
digits = len(num)
if digits < 4:
return num
current_set = len(num) % 3
format_num = ''
for number in num:
if not format_num and current_set >= 1:
format_num = format_num + number
current_set -= 1
if current_set == 0:
format_num = format_num + ','
current_set = 3
elif not format_num and current_set == 0:
format_num = format_num + number
current_set = 2
elif 0 < current_set <= 3:
format_num = format_num + number
current_set -= 1
else:
format_num = format_num + ',' + number
current_set = 2
if decimal:
format_num = format_num + "." + decimal
return format_num
Если есть более элегантный способ сделать это, я тоже рад это слышать, но он функционален ... главным образом. Я предполагаю, что это какое-то ограничение памяти? Чтобы дать вам пример того, что я получаю:
базовый номер: 9999999999999.32
возвращает: 9 999 999 999 999,32 (ожидается)
базовый номер: 999999999999999,32
возвращает: 999 999 999 999 999,4 (неправильный десятичный знак)
базовый номер: 9999999999999999.32
возвращает: 1e, + 16 (как?)
базовый номер: 1111111111111111.32
возвращает: 1,111,111,111,111,111,4 (неверный десятичный знак, но взял все 1, где я получил scientifi c запись с 9s)
Тот факт, что меньшие числа возвращают немного лучшие результаты, заставляет меня поверить, что это ограничение памяти или что-то в этом роде. Здесь я не могу найти ничего подходящего для этой конкретной ситуации. Я довольно новичок в Python, поэтому я прошу прощения, если это должно быть легко.
Спасибо всем! Аарон