在对我分配mouseX和mouseY的变量执行操作后,我一直在更新鼠标位置时遇到问题。
def setup():
size(500,500)
def draw():
background(255,255,255)
noStroke()
fill (0,0,0)
a1 = mouseX
b1 = mouseY
print a1
a1 = a1*(4/500) - 2 #trans to [-2,2]
b1 = b1*(4/500) - 2
print a1
当我打印a1时,我打印的第一个值更新但第二个值不是。因此,如果我将鼠标位置移动到(250,250),我会得到250作为第一个输出,-2作为我的第二个值。我对python并不太熟悉,因为我从来没有真正学过它,而且我正在寻找方法但却找不到它。请帮忙。谢谢
答案 0 :(得分:0)
我对Python一无所知,但在常规处理(基本上只是Java)中,int
值不能保存小数位。如果您尝试在int
值中存储小数位,则只需截断小数部分就会截断。
以下是一些例子:
int x = 3 / 2; // 1.5 is truncated so x is just 1
int y = 1 / 2; // 0.5 is truncated so y is just 0
现在,让我们将您的代码分成多个步骤。它可能看起来像这样:
int multiplier = 4 / 500;
a1 = a1 * multiplier;
a1 = a1 - 2;
希望您可以看到4 / 500
被截断,因此它只是0
。然后,当您将其乘以a
时,您会获得0
。然后您减去2
,因此最终结果为-2
。
您应该养成将代码分成多个步骤的习惯,这样您就可以更轻松地debug代码。
现在,要解决此问题,您需要使用float
变量,该变量允许小数位。由于您使用文字(4
和500
都是文字),您可以这样做:
a1 = a1 * (4.0 / 500.0) - 2
现在此代码使用4.0
和500.0
,因此结果为0.008
,其中包含小数部分。然后,剩下的计算将按照您的预期进行。
根据处理类型的工作方式,您也可以执行此操作:
a1 = a1 * 4/500 - 2
如果a1
已经是float
值,那么这将有效,因为首先计算a1 * 4
,结果为float
,其余部分应该按照你的期望工作。但只有a1
已经是float
时,这才有效。
你也应该尝试谷歌搜索" python int division"大量的结果。