从什么时候3/5 = 0?

Art*_*ode -8 c# math ncalc

所以我有一个很好的复杂的C#代码来处理数学方程式的替换.它的工作几乎完美.然而,当给出方程(x - y + 1) / z和值时x=2 y=0 z=5,它失败并且莫名其妙地失败.

问题不在于值传递给函数错误.没关系.问题是无论我使用什么类型,C#似乎认为3/5 = 0.

这是有问题的代码段:

public static void TrapRule(string[] args)
    {
        // ...

        string equation = args[0];
        int ordinates = Convert.ToInt32(args[1]);
        int startX = Convert.ToInt32(args[2]);
        int endX = Convert.ToInt32(args[3]);
        double difference = (endX - startX + 1) / ordinates;

        // ...
    }
Run Code Online (Sandbox Code Playgroud)

它被传递args为:

args[0] = Pow(6,[x])
args[1] = 5
args[2] = 0
args[3] = 2
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,使用NCalc,所以Pow()函数得到了评估 - 工作正常.)

结果?difference = 0.

使用float时和使用简单数学时会发生同样的事情:

Console.Write((3 / 5));
Run Code Online (Sandbox Code Playgroud)

产生相同的结果.

这是怎么回事?

Ste*_*eve 6

/运算符查看其操作数,当它发现它们是两个整数时,它返回一个整数.如果你想获得一个double值,那么你需要将两个整数之一转换为double

double difference = (endX - startX + 1) / (double)ordinates;
Run Code Online (Sandbox Code Playgroud)

您可以在C#参考中找到更正式的解释