我正在尝试使用ArcMap中的python字段计算器进行简单的计算,其中:
我试过的代码:
def getScore(num, den):
if num == 0:
return 0
else:
return (num/den) * 100
当我运行脚本时,我没有收到任何错误,但是'else'语句没有被返回。
分母中没有零,所以div / 0不会成为问题。输入字段都是“长”整数,目标字段是“double”。
我附上了一些图片,显示了python中的测试,其中完全相同的代码完美无缺,以及不起作用的字段计算器。
答案 0 :(得分:0)
这不是你想要的吗? 如果你一步一步这样做:
healthy = 1
total = 10
当然健康不是0,所以进入else
区块:
return (healthy / total) * 100
等于
return (1 / 10) * 100
然后等于:
return (0.1) * 100
哪个是10,就像你在屏幕截图中看到的那样。
答案 1 :(得分:0)
The way ArcGIS Desktop divides integers will result in an integer,因此百分比总是最终为零(例如1 / 10 = 0
) - 令人讨厌且违反直觉,但这就是它正在做的事情。
ArcGIS Pro使用Python 3,在ArcGIS Desktop中,它使用Python 2.Python 2使用整数数学,这意味着划分两个整数值将始终产生一个整数值(3/2 = 1)。在Python 3中,除以两个整数值将产生一个浮点数(3/2 = 1.5)。
您可以显式地将变量转换为 float ,然后执行浮点除法并为您提供浮点结果(1 / 10 = 0.1
)。以下适用于我:
def getScore(num, den):
if num == 0:
return 0
else:
return (float(num)/float(den)) * 100
一个观察结果:你的条件基本上是说"如果分子为零,不要分开,只需返回零" - 然而,无论如何,除以任何东西的是0。你可以跳过条件和整个代码块,直接计算 - 但仍然记得先将值转换为float,否则你仍会得到一堆零:)
float(!Healthy!) / float(!Total!)