为什么这个计算会返回这个结果? (蟒蛇)

时间:2016-10-20 16:18:40

标签: python math int

return 25.0 * (1 + 16.0/100)

这会返回29.0 但是,当使用如下所示的int()时,

return int(25.0 * (1 + 16.0/100))

这将返回28

我不明白为什么它是28而不是29。

3 个答案:

答案 0 :(得分:3)

实际结果类似于29.0,Python将轮询到int进行显示。但是,转换为28时,小数点后的数字会被删除,只留下29

为什么第一个结果几乎(但不完全)0.16?因为二进制浮点数学不能精确地表示“#34; nice"十进制,例如Decimal.decimal。在二进制中,这是一个永远不会终止的重复部分,因此无法在有限的存储器中精确表示。

那么为什么我们使用二进制浮点数如果它们不准确呢?因为计算机具有处理它们的硬件所以数学非常快,并且它们对于大多数目的而言足够准确。您可以使用{{1}}类来精确表示十进制数,但这会使您的数学运算更慢。

答案 1 :(得分:0)

这是一个问题 试试

background-image: radial-gradient(50px at 50% 50%, black 50px, transparent 0);

你会得到一个小于零的非常小的数字。

也许你应该使用圆形代替或组合使用int

print 25*(1+16.0/100) - 29

答案 2 :(得分:0)

在python中转换为整数只会删除小数位。要获得舍入的整数值,您可以使用

return int(round(25.0 * (1 + 16.0/100)))

这将返回29.

return round(25.0 * (1 + 16.0/100))

这将返回29.0,因为该值仍然表示为浮点并且尚未转换为整数。