Python Разделение после преобразования float в String приводит к неожиданному Scientifi c. - PullRequest
0 голосов
/ 05 января 2020

Я борюсь здесь 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, поэтому я прошу прощения, если это должно быть легко.

Спасибо всем! Аарон

...