除法运算符歧义

Divison operator ambiguity

Iclass Solution
{
   public double cToF(int C)
   {
        //Your code here
        double fh;
        fh = (C*(double)(9/5))+32; //C=32 F=64
        
        return fh;
   }
}

IIclass Solution
{
    public double cToF(int C)
    {
        //Your code here
        double fh; 
        fh = (C*1.8)+32; //C=32 F=89
        
        return fh;
    }
}

请看一下上面的代码。此代码主要将温度从摄氏度转换为华氏度。在代码 I 中,当我在公式中使用 (9/5) 时,我得到的答案是 64。但是在代码 II 中,当我使用 1.8(9/5=1.8) 时,我得到的答案是 89(正确的)。谁能解释一下这背后的逻辑?

实际上,当您除以 9/5 时,它将 95 作为一个整数,然后将整个答案评估为仅 integer。因此,9/5(实际上是 1.8)然后从 1.8 类型转换为 1。小数点后的部分被截断。因此,在您的第一个代码中,它将所有内容与 1 相乘,因此输出错误。

现在您会问,我已经将类型转换为 double 那为什么?

嗯,答案是首先计算 9/5 等于 1(根据计算机的 int 除法)。然后它将种姓 1 键入 double,即 1.0。因此,您可以改用 9.0/5.0。这也会给你正确的答案。