相关疑难解决方法(0)

浮点转换的自定义区域设置配置

我需要一个字符串转换格式"1.234.345,00"float1234345.00.

一种方法是重复使用str.replace:

x = "1.234.345,00"
res = float(x.replace('.', '').replace(',', '.'))

print(res, type(res))
1234345.0 <class 'float'>
Run Code Online (Sandbox Code Playgroud)

但是,这似乎是手动的和非一般化的.这个备受好评的答案建议使用该locale库.但我的默认语言环境与我的输入字符串没有相同的约定.然后我发现了一种方法来提取本地约定中使用的字符作为字典:

import locale

print(locale.localeconv())

{'int_curr_symbol': '', 'currency_symbol': '', 'mon_decimal_point': '',
 ..., 'decimal_point': '.', 'thousands_sep': '', 'grouping': []}
Run Code Online (Sandbox Code Playgroud)

有没有办法更新此字典,另存为自定义区域设置,然后能够调用此自定义区域设置.就像是:

mylocale = locale.create_new_locale()  # "blank" conventions or copied from default
mylocale.localeconv()['thousands_sep'] = '.'
mylocale.localeconv()['decimal_point'] = ','

setlocale(LC_NUMERIC, mylocale)
atof('123.456,78')  # 123456.78
Run Code Online (Sandbox Code Playgroud)

如果无法做到这一点,我们如何获得所有可用语言环境及其约定的列表?似乎反模式从约定中"推断"了正确的配置(更不用说低效/手动),所以我希望有一个通用的解决方案,比如上面的伪代码.


编辑:这是我尝试找到所有语言环境的地方thousands_sep == '.'decimal_point == ','.事实上,更一般地说,通过组合这些参数对区域设置进行分组:

import locale
from …
Run Code Online (Sandbox Code Playgroud)

python string floating-point locale python-3.x

11
推荐指数
1
解决办法
391
查看次数

标签 统计

floating-point ×1

locale ×1

python ×1

python-3.x ×1

string ×1