我试过:
import locale
print(locale.locale_alias)
locale.setlocale(locale.LC_ALL, '')
locale.setlocale(locale.LC_NUMERIC, "french")
print(f"{3.14:.2f}")
但输出是
3.14
而我想要3,14
.
How to do this with f"..." string formatting?
注意:我不想用
.replace(".", ",")
注意:我正在寻找 Windows 解决方案,以及来自 How to format a float with a comma as decimal separator in a f-string? 的解决方案不起作用(因此它在 Windows 上不是重复的):
locale.setlocale(locale.LC_ALL, 'nl_NL')
# or
locale.setlocale(locale.LC_ALL, 'fr_FR')
locale.Error:不支持的语言环境设置
我在重复标记的页面上查找了答案并找到了有效的答案:
把
print(f"{3.14:.2f}")
改成print(f"{3.14:.3n}")
,你会得到结果:3,14
见https://docs.python.org/3/library/string.html#format-specification-mini-language:
数字。这与“g”相同,只是它使用当前区域设置来插入适当的数字分隔符。'n'
鉴于
'g'
描述于:
一般格式。对于给定的精度 p >= 1,这会将数字四舍五入为 p 位有效数字,然后根据其大小将结果格式化为定点格式或科学记数法。精度 0 被视为等同于精度 1。 ...截断...g
'f'
的描述是:
定点符号。对于给定的精度 p,将数字格式化为小数点后正好有 p 位的十进制数。'f'
您可以使用“locale.format_string”代替“f string”
试试这个:
import locale
# Set the locale to "french"
locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
# Format the number 3.14 with 2 decimal places, using the french locale
print(locale.format_string("%.2f", 3.14, grouping=True))
问题已经过去了一点时间,但我会添加一个答案以供将来参考。
正如其他答案所表明的那样,
n
会自动获取您的语言环境设置(这是其目的之一),但精度数字的工作方式与您预期的不同。 3.14:.2n 表示你要2位数字。这不是指数字中的小数位数,而是指总数。因此,如有必要,小数点将向下舍入。
f
用于控制小数精度,但不支持语言环境格式化。要以区域设置敏感的方式使用 f
符号,有必要使用 locale.format_string()
函数格式化数字:
import locale
locale.setlocale(locale.LC_NUMERIC, "fr_FR.UTF-8")
print(f"{3.14:.3n}")
# 3,14
print(f"{3.14:.2n}")
# 3,1
print(f"{3.14:.1n}")
# 3
print(locale.format_string("%.2f", 3.14))
# 3.14