如何用逗号格式化浮点数作为 f 字符串中的小数点分隔符?

新手上路,请多包涵

对于 python 中的某些机器控制,我将结果写入文本文件,其他人可以将其复制到 Excel 中(这是这种情况下最方便的方法)。然而,在荷兰,Excel 有一个逗号作为小数点分隔符,因此我希望文本文件中的结果“位置”为 123,456,但是当我使用这样的 f-string 方法时:

     resultfile.write(f"Position\t{position:.5}")

这显然会导致点小数点分隔符。

我怎样才能将其更改为逗号而不遍历整个文件并用逗号替换点?

原文由 seaver 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 577
2 个回答

如果要 f 字符串中用逗号格式化浮点数,可以在将浮点数转换为字符串后使用替换:

 position = 123.456
f"Position\t{str(position).replace('.',',')}"

第二种选择是使用 Python 标准库模块语言环境( 但它不是线程安全的):

 import locale
locale.setlocale(locale.LC_ALL, 'nl_NL')
f"Position\t{locale.format('%.3f', position)}"

第三种选择是使用库 babel (在库例程的情况下首选):

 from babel.numbers import format_decimal
f"Position\t{format_decimal(position, locale='nl_NL')}"

对于给定的示例,所有三个选项都返回相同的结果:

 'Position\t123,456'

原文由 kadee 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您希望避免依赖性,以下简单函数可能会满足您的需要:

 def comma_num(n,f=''):
    return ('{'+f+'}').format(n).replace('.',',')

n = 1.23

f'Whatever {comma_num(n)}'
'Whatever {}'.format(comma_num(n))
>>>'Whatever 1,23'

f'Whatever {comma_num(n,":6.4f")}'
'Whatever {}'.format(comma_num(n,':6.4f'))
>>>'Whatever 1,2300'

原文由 mmj 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题