解析不同格式十进制数的字符串浮点数
Parse strings with different formats of decimal numbers to float
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
但问题是,我不知道字符串是哪种格式。我想知道是否有更简单、更清洁的方法。
这不是最有效的方法,但是使用正则表达式,我们可以将变量分成不同的部分,并计算其中的 "last one" 个,以决定如何执行翻译.
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
编辑:
我没有清理我的输入,第一个版本包含一些空格,使翻译陷入循环。
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
但问题是,我不知道字符串是哪种格式。我想知道是否有更简单、更清洁的方法。
这不是最有效的方法,但是使用正则表达式,我们可以将变量分成不同的部分,并计算其中的 "last one" 个,以决定如何执行翻译.
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
编辑: 我没有清理我的输入,第一个版本包含一些空格,使翻译陷入循环。