Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的奇怪行为是从地板上取整数_Python_Math_Logging_Floor - Fatal编程技术网

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)),您还应该阅读我为什么不应该这样写?