dar*_*sky 34 python floating-point python-3.x
我正在读一个带有浮点数的文本文件,所有文件都带有1或2个小数点.我正在使用float()将一行转换为浮点数,ValueError如果失败则引发一行.我将所有浮动存储在列表中.打印出来时,我想将其打印为2位小数浮点数.
假设我有一个带有数字-3,65,9,17,1的文本文件.我读了每一个,然后我将它们转换为float并将它们附加到列表中.现在在Python 2中,调用float(-3.65)返回-3.65.然而,在Python 3中,float(-3.65) returns-3.6499999999999999`失去了它的精度.
我想打印浮点列表,[-3.6499999999999999, 9.1699999999999999, 1.0]只有2个小数点.沿着行做某事'%.1f' % round(n, 1)会返回一个字符串.如何返回浮点数的所有两个小数点的列表,而不是字符串?到目前为止,我使用它来舍入它,[round(num, 2) for num in list]但需要设置小数点/精度而不是round().
小智 37
执行此操作的简单方法是使用圆形buit-in.
round(2.6463636263,2)将显示为2.65.
And*_*w E 37
注释表明目标是打印到2位小数.
Python 3有一个简单的答案:
>>> num=3.65
>>> "The number is {:.2f}".format(num)
'The number is 3.65'
Run Code Online (Sandbox Code Playgroud)
或等效于f-strings(Python 3.6+):
>>> num = 3.65
>>> f"The number is {num:.2f}"
'The number is 3.65'
Run Code Online (Sandbox Code Playgroud)
与往常一样,浮点值是近似值:
>>> "{}".format(num)
'3.65'
>>> "{:.10f}".format(num)
'3.6500000000'
>>> "{:.20f}".format(num)
'3.64999999999999991118'
Run Code Online (Sandbox Code Playgroud)
我认为大多数用例都希望使用浮点数,然后只打印到特定的精度.
那些希望数字本身存储精确到2位十进制数字的人,我建议使用十进制类型.对于那些感兴趣的人,更多关于浮点精度的阅读.
NPE*_*NPE 25
总之,你做不到.
3.65不能完全表示为a float.您获得的数字是最接近的数字3.65,具有精确的float表示.
(较旧的?)Python 2和3之间的区别纯粹是由于默认格式.
我在Python 2.7.3和3.3.0中看到以下内容:
In [1]: 3.65
Out[1]: 3.65
In [2]: '%.20f' % 3.65
Out[2]: '3.64999999999999991118'
Run Code Online (Sandbox Code Playgroud)
有关精确的十进制数据类型,请参阅decimal.Decimal.
尝试这个:
num = input("Please input your number: ")
num = float("%0.2f" % (num))
print(num)
Run Code Online (Sandbox Code Playgroud)
我相信这要简单得多。对于1个小数位使用%0.1f。对于2个小数位,使用%0.2f等等。
或者,如果您要将其全部减少为2行:
num = float("%0.2f" % (float(input("Please input your number: "))))
print(num)
Run Code Online (Sandbox Code Playgroud)