Python的奇怪行为是从地板上取整数
检查楼层是否为整数时,建议使用Python的奇怪行为是从地板上取整数,python,math,logging,floor,Python,Math,Logging,Floor,检查楼层是否为整数时,建议使用is\u integer: 但是,我在log函数的结果中发现了一种奇怪的行为: print(log(9,3)); #2.0 print((log(9,3)).is_integer()); #True print((log(243,3))); #5.0 print((log(243,3)).is_integer()); #False 此外: print(
is\u integer
:
但是,我在log
函数的结果中发现了一种奇怪的行为:
print(log(9,3)); #2.0
print((log(9,3)).is_integer()); #True
print((log(243,3))); #5.0
print((log(243,3)).is_integer()); #False
此外:
print((int) (log(9,3))); #2
print((int) (log(243,3))); #4
这正常吗?日志(243,3)
不能准确给出5:
>>> '%.60f' % log(243,3)
'4.999999999999999111821580299874767661094665527343750000000000'
比如说,
log(x,base)
是“计算为log(x)/log(base)”。而且无论是log(243)
还是log(3)
都不能精确表示,并且会得到舍入误差。有时你是幸运的,有时你不是。不要指望它。当您想要比较浮点数时,请使用
如果要转换接近整数的浮点数,请使用
浮点数易出错,无法使用“常规”方法。不幸的是,它们的精度(以及log
等函数的精度)太有限。看起来像5的可能不是精确的5
是的,这很正常。这不是Python的问题,而是我所知道的每种语言的问题(它们都使用相同的底层表示)。Python提供了一些解决浮点问题的方法:和。两者都有各自的缺点,但有时会有所帮助。例如,使用
分数
,可以在不损失精度的情况下表示1/3。类似地,使用十进制
,可以精确表示0.1。但是,您仍然会遇到log
,sqrt
,无理数,需要许多数字来表示的数字等问题。您不是在写c,print(int(log(243,3)),您还应该阅读我为什么不应该这样写?