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

问题描述 投票:0回答:3

我试过:

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:不支持的语言环境设置

python windows floating-point decimal locale
3个回答
3
投票

我在重复标记的页面上查找了答案并找到了有效的答案:

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


1
投票

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

0
投票

问题已经过去了一点时间,但我会添加一个答案以供将来参考。

正如其他答案所表明的那样,

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
© www.soinside.com 2019 - 2024. All rights reserved.