C++ c++;静态_cast返回零

C++ c++;静态_cast返回零,c++,c++11,visual-c++,C++,C++11,Visual C++,我的问题是: #include <stdio.h> #include <math.h> int main() { int n = static_cast<int>(50 * (60 / 99)); printf("Floor: %d\n", n); return 0; } #包括 #包括 int main() { int n=静态(50*(60/99)); printf(“楼层:%d\n”,n); 返回0; } 为什么函数应

我的问题是:

#include <stdio.h>
#include <math.h>

int main()
{

    int n = static_cast<int>(50 * (60 / 99));

    printf("Floor: %d\n", n);

    return 0;
}
#包括
#包括
int main()
{
int n=静态(50*(60/99));
printf(“楼层:%d\n”,n);
返回0;
}
为什么函数应该打印30,却打印0


因为计算结果是:30.30303030

计算结果不是
30.30303030
,而是
0
,因为

  • 将计算
    60/99
    。结果向零截断,因为这是整数除法,结果为0
  • 将计算
    50*0
    。结果是0
  • 您应该使用
    double
    进行计算

    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
    
        int n = static_cast<int>(50.0 * (60.0 / 99.0));
    
        printf("Floor: %d\n", n);
    
        return 0;
    }
    
    #包括
    #包括
    int main()
    {
    int n=静态(50.0*(60.0/99.0));
    printf(“楼层:%d\n”,n);
    返回0;
    }
    

    使用
    50*(60.0/99)
    50*(60/99.0)
    而不是
    50.0*(60.0/99.0)
    也可以,因为其他操作数将转换为
    double
    以匹配类型,但使用
    50.0*(60/99)
    并不好,因为
    60/99
    是0。

    它更像是0.6。。如何使孔计算返回30?60/99作为整数数学计算,因此结果为0。将任意一个值更改为浮点值:`60.0f/99.f`将是完成此项工作的一种方法。归档此项工作的一种方法是使用另一种语言,如JavaScript,或您开发的支持
    静态转换的语言,总是返回浮点值的除法,以及您需要的所有其他功能。由于缺乏研究,被否决。这个问题的答案很难找到,无论是在某处还是在其他资源中。太糟糕了,我无法向您显示我的搜索历史。。。我确实搜索了2个小时…非常感谢:D我不认为双倍搜索会有帮助:D问题解决了。现在我可以轻松地编写系统的其余部分。因为50是一个可变的玩家级别。