(Python)为什么它返回9.0而不是9?

时间:2015-08-10 21:17:16

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

尝试在python中为“学习Python书”中的项目创建一个简单的计数器

简介:编写一个为用户计算的程序。让用户输入起始编号,结束编号和计算的数量。

问题:好的,所以基本上试图确保如果用户输入
         在(从2开始并在2中计数到17)程序会将其标记为不可能。

print ("Welcome to the program for those who are to lazy to count")
print ("You must be really really lazy too use this")

input ("\n Press any key to continue")

Num1 = int(input ("Please Enter Starting Number: \n"))
Num2 = int(input ("Please Enter Ending Number: \n"))
count = int(input ("Count up in: \n"))

differ = (Num2 - Num1)

test =(differ/count)

if isinstance(test,int):
 while (Num1 < Num2):
  Num1 += count
  print (Num1)   
  isinstance( test, int )
else:
    print ("Sorry Starting at",Num1,"You can not get to",Num2,"counting up by",count,)

((我做了一些测试,发现变量测试总是以float形式返回。例如9的整数将是9.0,这当然会使我的if语句错误。任何人都可以解释为什么会发生这种情况如何解决/绕过它?))

4 个答案:

答案 0 :(得分:6)

您应该测试是否(differ % count) == 0而不是检查您的test是否为整数。除法运算的结果总是浮点数,因为python 3默认为浮点除法。可以强制它使用//执行整数除法。

请参阅python docs for modulo

答案 1 :(得分:1)

wilbur的答案是最好的,但是如果你仍然想使用除法而不是模数,而不是检查if isinstance(test, int)哪个检查test是否真的是一个整数类型(对于9.0来说不是这样) ,你可以尝试if test.is_integer(),如果它是一个带有整数值的浮点数,那么它将返回True

这不是一个值得信赖的方法,因为与浮点数的划分是不精确的。使用模运算符更可靠!

答案 2 :(得分:0)

Python 3默认执行浮点除法。如果要强制整数除法,请在商(differ // count)中表示双斜杠。

答案 3 :(得分:0)

Python 3 /总是返回float。对于整数除法,请使用//