Разбирать строки с различными форматами десятичных чисел для плавания - PullRequest
0 голосов
/ 16 апреля 2020

Есть ли в python простой способ разбить несколько различных форматов возможных десятичных чисел на числа? Можно использовать следующие форматы (обычно суммы):

111 -> 111.00
111.00 -> 111.00
111,00 -> 111.00
11,111.00 -> 11111.00
11.111,00 -> 11111.00
11,111,111.00 -> 11111111.00
11.111.111,00 -> 11111111.00
111.111 -> 111111.00
111,111 -> 111111.00
111.111,00 -> 111111.00
111,111.00 -> 111111.00

В настоящий момент я могу думать только о том, чтобы посмотреть, есть ли другие специальные символы ("," и "."), А затем посмотреть, какой из них является десятичный разделитель и так далее. Но это было бы много if/else Я думаю. Я также пробовал locale.atof, но проблема в том, что я не знаю, в каком формате находится строка. Мне интересно, есть ли более простой и чистый способ.

1 Ответ

0 голосов
/ 16 апреля 2020

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

import re

values = """111
111.00
111,00
11,111.00
11.111,00
11,111,111.00
11.111.111,00
111.111
111,111
111.111,00
111,111.00"""

values = [i for i in values.split("\n")]
for value in values:
    value = re.split(r"\.|,", value.strip())
    if len(value[-1]) <=2 and len(value) > 1:
        newVal = float("".join(value[:-1]) + "." + value[-1])
    else:
        newVal =float("".join(value))
    print(newVal)

Вывод:

111.0
111.0
111.0
11111.0
11111.0
11111111.0
11111111.0
111111.0
111111.0
111111.0
111111.0

РЕДАКТИРОВАТЬ: я не дезинфицировал свои входные данные, первая версия включала некоторые пробелы, бросая перевод в al oop.

...