如何在Python中将浮点数转换为带有逗号作为小数点分隔符的两位小数?

18

我有一个浮点数:1.2333333

如何将其转换为只保留两位小数且以逗号作为小数点分隔符的数字,例如 1,23?


将Python中的浮点数转换为十进制数 - Ólafur Waage
1
@Ólafur Waage - 地区设置的内容不在https://dev59.com/pnRC5IYBdhLWcg3wYP6h中。 - Dominic Rodger
3个回答

16

要保留两位小数,可以使用

'%.2f' % 1.2333333

要得到逗号,请使用 replace()

('%.2f' % 1.2333333).replace('.', ',')

第二个选项是更改区域设置到一个使用逗号的地方,然后使用locale.format()

locale.setlocale(locale.LC_ALL, 'FR')
locale.format('%.2f', 1.2333333)

2
这是绝对错误的。普通的"%f"字符串格式化程序不依赖于语言环境。 - u0b34a0f6ae
有时候,它是这样的:https://bugs.webkit.org/show_bug.cgi?id=18994 我已经改进了我的答案以避免歧义。 - Aaron Digulla
@FlorianPilz:根据我的Python版本和文档,不是这样的。 - Aaron Digulla
@AaronDigulla 我删除了我的评论,因为我已经在Ruby中解释了这种行为。遗憾的是,我不能改变我的投票。 - Florian Pilz

8

使用locale模块可以帮助你以本地格式读写数字。

>>> import locale
>>> locale.setlocale(locale.LC_ALL, "")
'sv_SE.UTF-8'
>>> locale.format("%f", 2.2)
'2,200000'
>>> locale.format("%g", 2.2)
'2,2'
>>> locale.atof("3,1415926")
3.1415926000000001

2

如果您不想涉及区域设置,当然可以自己进行格式化。以下可能作为起点:

def formatFloat(value, decimals = 2, sep = ","):
  return "%s%s%0*u" % (int(value), sep, decimals, (10 ** decimals) * (value - int(value)))

请注意,这将始终截断小数部分(即1.04999将打印为1,04)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接