在 Python 中为小数点后的小数点添加零

Add zeros to a float after the decimal point in Python

提问人: 提问时间:3/25/2013 最后编辑:Melchia 更新时间:11/16/2023 访问量:201635

问:

我正在从一个文件中读取数据,对其进行修改并将其写入另一个文件。新文件将被另一个程序读取,因此继承确切的格式至关重要

例如,我的输入文件上的一个数字是:

1.000000

我的脚本对列应用了一些数学运算,应该返回

2.000000

但目前返回的是

2.0

例如,我将如何编写浮点数作为文件?my_float = 2.0my_float = 2.00000

Python 浮点 十进制

评论

3赞 Martijn Pieters 3/26/2013
@DemianBrecht:我们在这里谈论的是格式化浮点数。
0赞 Demian Brecht 3/26/2013
@MartijnPieters:无论是格式化浮点数还是格式化浮点数的字符串表示形式,写入文件时输出都是相同的。虽然我(现在)同意我的链接不是骗子,但也许是“相关”。

答:

105赞 Martijn Pieters 3/25/2013 #1

将其格式化为小数点后 6 位:

format(value, '.6f')

演示:

>>> format(2.0, '.6f')
'2.000000'

format() 函数按照给出的格式化说明将值转换为字符串。

评论

0赞 Justin Carroll 3/26/2013
如果我错了,请纠正我,但这也有“四舍五入到小数点后 6 位”的隐含指示,而不仅仅是“保留小数点后 6 位”。因此,虽然它在所有零的上下文中都是有道理的,但人们可能使用精度的原因意味着您实际上可以使用该精度,因此,如果您想避免舍入错误,您可能需要进一步(并截断)。例如,尝试:format(2.0000008, '.6f')。但除此之外,我完全同意 Martijn 的观点。
1赞 Martijn Pieters 3/26/2013
@Nascent_Notes:由于输入限制为小数点后 6 位,我认为可以安全地假设四舍五入到小数点后 6 位就可以了。
0赞 3/26/2013
谢谢,该解决方案对我来说完全有效!是的,输入限制在小数点后 6 位,所以我(希望)不会遇到舍入错误
0赞 michaelmoo 2/8/2015
@JustinCarroll我不明白你在说什么,所以万一其他人感到困惑:Martijn 显示的格式命令会舍入该值。format( 5.555, '.2f' ) 给出 5.55。format( 5.5551, '.2f' ) 给出 5.56。format(2.0000008, '.6f') 给出 2.000001。
1赞 Justin Carroll 2/8/2015
@michaelmoo,我的评论就是这样。格式会进行舍入,而不仅仅是填充。IFF,问题写着“如何用 5 填充”,你做不到.这将得到 5.5556 的结果。这简直就是一个警告。我认为你的评论说的是同样的事情,只是措辞不同。format(5.55555, '.4f')
3赞 chason 3/26/2013 #2

使用 format() 命令的答案如上所述,但如果您正在处理需要表示精确值的浮点数,则可能需要查看 Decimal 标准库对象。您可以在其上下文类中设置精度和舍入,但默认情况下,它将保留您放入其中的零数:

>>> import decimal
>>> x = decimal.Decimal('2.0000')
>>> x
Decimal('2.0000')
>>> print x
2.0000
>>> print "{0} is a great number.".format(x)
2.0000 is a great number.

评论

1赞 jeromej 3/2/2017
如何将精度设置为其他内容?
7赞 Iqra. 8/30/2018 #3

我尝试了很多方法,但没有一种方式符合我想要的方式,直到最后,这对我有用:

foo = 56
print(format(foo, '.1f'))
print(format(foo, '.2f'))
print(format(foo, '.3f'))
print(format(foo, '.5f'))
    
output:
    
56.0 
56.00
56.000
56.00000

这意味着 的第二个参数采用您必须达到的小数位。请记住,返回一个字符串。formatformat

22赞 NumesSanguis 9/16/2020 #4

从 Python 3.6 开始,也可以进行 f 字符串格式化。这看起来像:

f"{value:.6f}"

例:

> print(f"{2.0:.6f}")
'2.000000'
5赞 Burcak Akiska 5/6/2021 #5

我在f字符串中使用变量时遇到了问题。当所有其他方法都失败时,请阅读手册:)

“与常规字符串文字共享相同语法的结果是,替换字段中的字符不得与外部格式化字符串文字中使用的引号冲突。”

https://docs.python.org/3/reference/lexical_analysis.html#f-strings

举个例子:

my_number = 90000
zeros = '.2f'

my_string = f"{my_number:,{zeros}}"

print (my_string)
90,000.00

my_string = f'{my_number:,{zeros}}'

由于单引号,将不起作用。

包含 f 字符串和字符串的引号 F 字符串中使用的变量应为 不同

如果对字符串变量使用单引号, 对 F 模块使用双引号,反之亦然。