【问题标题】:How to fix the precision with the `n` format如何使用“n”格式修复精度
【发布时间】:2018-09-02 03:15:48
【问题描述】:

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

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

'{0:#.2n}'.format(1.1)

我收到'1,1'。逗号在那里,但精度只有一,而我将其设置为二。怎么会?


注意这种格式的构造如下:

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

引用来自手册的地方:Format Specification Mini-Language


按照 cmets 中的建议使用 {.2f} 也不能满足我的要求:'1.10'。精度正确,但语言环境中的逗号被忽略。

【问题讨论】:

  • 什么是n?对于浮点数,使用 f。它适用于.2f
  • 它不能与 2f 一起使用,因为它打印 1.1
  • 技术上1.1 是浮点数而不是小数。
  • @Psytho、@BlueTomato、@Martin:n 是为了遵守语言环境。 f 忽略这一点,请参阅编辑。
  • print(format('{0:#.2f}'.format(1.1)).replace('.',','))

标签: python string-formatting


【解决方案1】:

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

precision 是一个十进制数,表示对于格式为'f''F'之前和之后的浮点值,小数点后应显示多少位用'g''G' 格式化的浮点值的小数点

所以.2n的意思是在小数点前后打印2位。

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

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

【讨论】:

  • 好的。这澄清了(我显然应该是一个更好的读者)。但是我怎样才能确定精度呢?或者这根本不可能?
  • 我添加了一个示例,展示如何使格式动态化。
猜你喜欢
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多