Python 3 Float十进制点/精度

时间:2013-01-26 18:31:29

标签: python python-3.x floating-point

我正在读取带有浮点数的文本文件,所有文本文件都带有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()

5 个答案:

答案 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

希望这能帮到你!