整数乘以浮点数给出奇怪的结果

时间:2021-04-28 06:46:11

标签: c# unity3d precision floating-accuracy

当我意识到控制台中有一些奇怪的数字时,我正在编写这段代码来获取最多两位小数的随机浮点数。

public void PrintNumbers()
{
   for(int i = 0; i < 30; i++)
   {
      int num = Random.Range(1, 200);
      float x = num * 0.1f;
      print(x);
   }
}

然后我意识到这个数字总是 8.900001 所以我写了这段代码:

public void PrintWeirdNumber()
{
    float x = 89 * 0.1f;
    print(x);
}

此方法总是打印 8.900001。我已经找到了一个简单的解决方案,就是将整数除以 10.0f 而不是乘以 0.1f。

public void PrintNumber()
{
    float x = 89 / 10.0f;
    print(x);
}

这将始终打印 8.9

为什么会这样?我只是不太了解浮点数,无法了解这背后的原因。有什么帮助吗?

0 个答案:

没有答案
相关问题