我的场景中有6个InputField。它们的内容类型是十进制。
我从这些输入字段中获取值,并检查它们的总和是否等于100.02。我都输入了16.67。
float fireP = float.Parse(firePercentage.text); float waterP = float.Parse(waterPercentage.text); float lightP = float.Parse(lightPercentage.text); float nightP = float.Parse(nightPercentage.text); float natureP = float.Parse(naturePercentage.text); float healthP = float.Parse(healthPercentage.text); float total = fireP + waterP + lightP + nightP + natureP + healthP; if (total == 100.02f) { Debug.Log("It's equal"); } else { Debug.Log(" Not equal. Your sum is = " + total); }
我的控制台日志中显示“不等于。您的总和= 100.02”。无论如何,为什么会这样呢?
最近float的16.67是16.6700000762939453125。
float
16.67
16.6700000762939453125
最近float的100.02是100.01999664306640625
100.02
100.01999664306640625
将前者加到自身5次并不 完全 等于后者,因此它们将不会相等。
在这种 特殊 情况下,与1e-6量级的 公差 进行比较可能是可行的方法。