return 25.0 * (1 + 16.0/100)
这会返回29.0
但是,当使用如下所示的int()时,
return int(25.0 * (1 + 16.0/100))
这将返回28
我不明白为什么它是28而不是29。
答案 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,因为该值仍然表示为浮点并且尚未转换为整数。