提问人:jjk 提问时间:7/2/2020 更新时间:7/2/2020 访问量:972
ATOF 返回无法将字符串转换为浮点数:“2, 5”
atof returns could not convert string to float: '2, 5'
答:
5赞
dawg
7/2/2020
#1
实际上,您必须将语言环境设置为数字分隔符的位置,而不仅仅是导入模块。该类别LC_NUMERIC:,
import locale
s='2,5'
locale.setlocale(locale.LC_NUMERIC, 'de_DE') # 'de_DE' is just an example
x=locale.atof(s)
或者,如果您的操作系统环境设置为数字分隔符所在的区域设置,您通常可以按照以下语言环境文档中的建议执行操作:,
import locale
locale.setlocale(locale.LC_ALL, '')
这会将所有类别的区域设置设置为用户的默认设置 (通常在 LANG 环境变量中指定)。
评论
1赞
Dietrich Epp
7/2/2020
您可能更喜欢 ,因为这将使用用户的环境来选择语言环境,而不是硬编码。setlocale(locale.LC_NUMERIC, '')
de_DE
0赞
dawg
7/2/2020
@DietrichEpp:举个例子,因为我不知道他的操作系统本地设置是什么......我补充了这个解释。谢谢!
0赞
jjk
7/2/2020
工程。不过需要添加utf8。locale.setlocale(locale.LC_NUMERIC, 'de_DE.utf8')
2赞
Tony Suffolk 66
7/2/2020
#2
您没有设置区域设置 - 所以我不知道它可能默认是什么;大概是系统默认值。
试试这个:
import locale
locale.setlocale(locale.LC_ALL, '')
s='2,5'
x=locale.atof(s)
这会将所有类别的区域设置设置为用户默认值。
那行得通吗?
评论
2赞
Dietrich Epp
7/2/2020
如果不设置区域设置,则会获得“C”区域设置。
0赞
Tony Suffolk 66
7/2/2020
@DietrichEpp - 什么是“C”语言环境 - 我从未接近过本地化
1赞
Dietrich Epp
7/2/2020
C 语言环境使用英语,但简化了规则。例如,仅在 C 语言环境中(但它在“en”语言环境中的行为可能有所不同)。请参见:unix.stackexchange.com/questions/87745/what-does-lc-all-c-dostrcoll()
strcmp()
0赞
Tony Suffolk 66
7/2/2020
@DietrichEpp - 谢谢。我真的应该考虑如何对我的一些库进行适当的本地化。
评论
2.5
区域设置。LC_NUMERIC
选项。2.5
atof
2,5