小编典典

比较Unity中的浮点数

c#

我的场景中有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”。无论如何,为什么会这样呢?


阅读 781

收藏
2020-05-19

共1个答案

小编典典

最近float16.6716.6700000762939453125

最近float100.02100.01999664306640625

将前者加到自身5次并不 完全 等于后者,因此它们将不会相等。

在这种 特殊 情况下,与1e-6量级的 公差 进行比较可能是可行的方法。

2020-05-19