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



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

    resultfile.write(f"Positiont{position:.5}")

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

如何在不遍历整个文件的情况下将其更改为逗号,并将点替换为逗号?

如果要在

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

position = 123.456
f"Positiont{str(position).replace('.',',')}"

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

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

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

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

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

'Positiont123,456'

正如@michel-de-ruiter所提到的,f格式不适用于语言环境。另一方面,不能使用n格式设置精度。例如,如果您希望小数点分隔符后有 4 位数字:

import locale
locale.setlocale(locale.LC_ALL, 'nl_NL')
position = 123.45678999
print(f'{position:.4n}')  # output: 123,4 (not quite what we wanted!)

但是,您可以在格式化数字之前以所需的精度对数字进行舍入:

print(f'{round(position, 4):n}')  # output: 123,4567 (that's it!)

如果您希望避免依赖关系,以下简单函数可能适合您的需求:

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'

如果g格式对您来说足够好,请改用n

resultfile.write(f"Positiont{position:.7n}")

虽然n工作(使用时使用时使用当前语言环境设置(而不是同时dg,但不幸的是,f格式没有这样的事情......

更简单的解决方案可能是:

f"Positiont{position:,.5f}"

相关内容

  • 没有找到相关文章

最新更新