如何使 f "..."字符串格式使用逗号而不是点作为小数点分隔符?



我试过了:

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位的十进制数。

您可以使用"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

如果您想使用n格式化器,并且仍然需要十进制精度,那么round()函数是一个选项。

print(f'{round(3.14, 2):n}')
# 3,14

最新更新