如何使用“n”格式修复精度

Tom*_*eus 5 python string-formatting

我想使用逗号作为小数点分隔符来打印小数点。当我这样做时

import locale
locale.setlocale(locale.LC_ALL, 'nl_NL')

'{0:#.2n}'.format(1.1)
Run Code Online (Sandbox Code Playgroud)

我明白了'1,1'。逗号在那里,但精度只有 1,而我将其设置为 2。怎么会?


请注意,此格式的构造如下:

  • #:“该'#'选项导致使用“替代形式”进行转换。...此外,对于'g''G'转换,不会从结果中删除尾随零。”
  • .2: 精确。
  • n:“数字。这与 相同'g',只是它使用当前区域设置来插入适当的数字分隔符。”

其中引用来自手册:格式规范迷你语言


按照评论中的建议使用{.2f}也不能达到我想要的效果:'1.10'。精度是正确的,但区域设置中的逗号被忽略。

Bar*_*mar 2

n用于打印 a时float,它的作用类似于g,而不是f,但使用您的区域设置作为分隔符。精度的文档说:

精度是一个十进制数字,指示使用和格式化的浮点值的小数点后应显示多少位,或者对于使用格式化的浮点值的小数点前后应显示多少'f''F''g''G'

so.2n表示打印小数点前后总共 2 位数字。

我认为没有一种简单的方法可以f通过语言环境的风格使用来获得风格精度n。您需要确定您的数字小数点前有多少位数字,加 2,然后将其用作格式中的精度。

precision = len(str(int(number))) + 2
fmt = '{0:#.' + str(precision) + 'n'
print(fmt.format(number))
Run Code Online (Sandbox Code Playgroud)