提问人:Basj 提问时间:1/10/2023 最后编辑:Basj 更新时间:3/24/2023 访问量:711
如何制作那个f“...”字符串格式使用逗号而不是点作为小数分隔符?
How to make that f"..." string formatting uses comma instead of dot as decimal separator?
问:
我试过了:
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
如何使用 f“...”字符串格式?
注意:我不想使用.replace(".", ",")
注意:我正在寻找 Windows 解决方案,以及如何在 f 字符串中用逗号格式化浮点数作为小数分隔符的解决方案? 不起作用(因此它在 Windows 上不是重复的):
locale.setlocale(locale.LC_ALL, 'nl_NL')
# or
locale.setlocale(locale.LC_ALL, 'fr_FR')
现场。错误:不支持的区域设置设置
答:
我在重复标记的页面上查找了答案,并找到了一个有效的答案:
更改为,您将得到结果:print(f"{3.14:.2f}")
print(f"{3.14:.3n}")
3,14
请参见 https://docs.python.org/3/library/string.html#format-specification-mini-language:
'n'
数。这与“g”相同,只是它使用当前区域设置插入适当的数字分隔符。
鉴于在以下位置描述:'g'
g
常规格式。对于给定的精度 p >= 1,这会将数字四舍五入为 p 位有效数字,然后根据其大小以定点格式或科学记数法格式化结果。精度 0 被视为等同于精度 1。 ...截断。。。
描述是:'f'
'f'
定点符号。对于给定精度 p,将数字格式化为十进制数,小数点后正好是 p 位数字。
评论
.2f
.
.2n
,
n
您可以使用“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))
问题之后已经过去了一段时间,但我会添加一个答案以供将来参考。
正如其他答案所指出的,将自动选取您的区域设置(这是其目的之一),但精度数字的工作方式与您预期的不同。3.14:.2n 表示您想要 2 位数字。这不是指数字中的小数位数,而是指总数。因此,如有必要,小数位将向下舍入。n
f
用于控制十进制精度,但不支持区域设置格式。要以区分语言环境的方式使用符号,必须使用 function 格式化数字: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
如果您想使用格式化程序,并且仍然需要十进制精度,那么 round() 函数是一个选项。n
print(f'{round(3.14, 2):n}')
# 3,14
评论
print(f"{3.14:.2f}")
print(f"{3.14:.3n}")
3,14
.3f
.3n