首页 文章

如何使用`n`格式修复精度

提问于
浏览
4

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

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

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

我得到 '1,1' . 逗号在那里,但精度只有一个,而我把它设置为两个 . 怎么会?


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

  • # :“ '#' 选项导致"alternate form"用于转换 . ...此外,对于 'g''G' 转换,不会从结果中删除尾随零 . ”

  • .2 :精确 .

  • n :“数字 . 这与 'g' 相同,只是它使用当前的语言环境设置插入适当的数字分隔符 . ”

引号来自手册:Format Specification Mini-Language .


使用评论中建议的 {.2f} 也不能做我想要的: '1.10' . 精度是正确的,但忽略来自语言环境的逗号 .

1 回答

  • 2

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

    精度是一个十进制数,表示在用'f'和'F'格式化的浮点值的小数点后面应显示多少位数,或者在用'g'格式化的浮点值的小数点前后显示多少位数或'G' .

    所以 .2n 表示在小数点前后打印2位总数 .

    我不是一个简单的方法来使用 n -style使用locale获得 f -style精度 . 您需要确定您的数字在小数点之前有多少位数,将其加2,然后将其用作格式中的精度 .

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

相关问题