如何判断浮点除法的结果是否应为整数?

时间:2019-05-23 22:02:55

标签: c# unity3d

我想知道除法后是整数还是浮点数。

if (5.4 / 0.8 ==integer)  // except something that would evaluate as true in this case

{

}

5 个答案:

答案 0 :(得分:3)

一种方法是使用Mathf.Round查找最接近结果的整数,并使用Mathf.Approximately将整数与结果进行比较:

float f1 = 0.5;
float f2 = 0.1;
float result = f1/f2;

if (Mathf.Approximately(result, Mathf.Round(result)) {
    Debug.Log("integer result");
}

答案 1 :(得分:3)

浮点数计算存在精度问题。
例如,0.3 / 0.1等于2.9999999999999996,而不是3。
为了进行比较,您需要将它们四舍五入并检查差异是否可以接受。

var result = 0.3 / 0.1;
if (Math.Abs(Math.Round(result) - result) < 0.0000001) 
{
    // Do something
}

答案 2 :(得分:1)

使用Math库的其他示例当然更好,但是另一种方法是在除法之前将值转换为decimal(让转换处理舍入) ),然后确保将结果除以1时没有余数:

private static bool DivisionIsInteger(double numerator, double denominator)
{
    return (decimal) numerator / (decimal) denominator % 1 == 0;
}

从@elgonzo到 ouch 的评论开始倒计时...现在

答案 3 :(得分:-2)

尝试一下:

var div = 5.4 / 0.8;
var divRound = Math.Round(div);

if (div == divRound)
{
    Console.WriteLine("Is integer");
}
else
{
    Console.WriteLine("Is Float");
}

答案 4 :(得分:-4)

我认为最快的方法是:

var a = 5.4;
var b = 0.8;
var result = a / b;
var isInteger = result % 1 == 0;

if (isInteger)
{
    ....
}

希望这会有所帮助