我正在读取带有浮点数的文本文件,所有文本文件都带有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()
。
答案 0 :(得分:32)
这样做的简单方法是使用圆形内置。
round(2.6463636263,2)
将显示为2.65
。
答案 1 :(得分:28)
评论声明目标是打印到2位小数。
Python 3有一个简单的答案:
float getMidPoint(int final, int initial, int rectangle, int coefficient1, int coefficient2, int coefficient3)
{
float deltaX;
float sumMidPoint;
float f_X;
float x;
x = initial;
deltaX = (final - initial) / rectangle;
while(x < final)
{
f_X = pow((coefficient1 * x), 2) + (coefficient2 * x) + coefficient3;
sumMidPoint += f_X * deltaX;
x = x + deltaX;
}
return (sumMidPoint);
}
或等效于f-strings(Python 3.6 +):
>>> num=3.65
>>> "The number is {:.2f}".format(num)
'The number is 3.65'
与往常一样,浮点值是近似值:
>>> num = 3.65
>>> f"The number is {num:.2f}"
'The number is 3.65'
我认为大多数用例都需要使用浮点数,然后才能打印达到特定的精度。
那些希望数字本身存储精确到2位小数的人,我建议使用decimal类型。 More reading on floating point precision感兴趣的人。{/ p>
答案 2 :(得分:22)
总之,你不能。
3.65
无法完全表示为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'
有关精确的十进制数据类型,请参阅decimal.Decimal
。
答案 3 :(得分:3)
试试这个:
num = input("Please input your number: ")
num = float("%0.2f" % (num))
print(num)
我相信这更简单。对于1位小数,请使用%0.1f
。对于2位小数,请使用%0.2f
,依此类推。
或者,如果你想将它全部减少到2行:
num = float("%0.2f" % (float(input("Please input your number: "))))
print(num)
答案 4 :(得分:2)
尝试通过以下函数使用python3
来理解def floating_decimals(f_val, dec):
prc = "{:."+str(dec)+"f}" #first cast decimal as str
print(prc) #str format output is {:.3f}
return prc.format(f_val)
print(floating_decimals(50.54187236456456564, 3))
输出为:50.542
希望这能帮到你!