C++ 通过将值从int改为float,总值会发生变化,有人能解释为什么吗?请

C++ 通过将值从int改为float,总值会发生变化,有人能解释为什么吗?请,c++,c,algorithm,C++,C,Algorithm,我已经尝试了几次来确定原因,但我无法这样做,因此如果有人被确定,请让我知道 #include <stdio.h> int main() { int i,n=1; float div=0,sum=0,j=1; for(i=1;i<=7;i++) { j=1; for(n=1;n<=i;n++) { j=j*n; } div=i/j+div;

我已经尝试了几次来确定原因,但我无法这样做,因此如果有人被确定,请让我知道

#include <stdio.h>
    
int main()
{
    int i,n=1;
    float div=0,sum=0,j=1;
    for(i=1;i<=7;i++)
    {
        j=1;
       for(n=1;n<=i;n++)
       {
           j=j*n;
       }
    div=i/j+div;
    
    }
    printf(" %f",div);

    return 0;
}
通过运行上述程序,我们得到的结果为2.72,这是正确的。但是如果我们运行下面的代码

#include <stdio.h>

int main()
{
    int i,n=1,j=1;
    float div=0,sum=0;
    for(i=1;i<=7;i++)
    {
        j=1;
       for(n=1;n<=i;n++)
       {
           j=j*n;
       }
    div=i/j+div;
    
    }
    printf(" %f",div);

    return 0;
}
#包括
int main()
{
int i,n=1,j=1;
float div=0,sum=0;

对于(i=1;i您不能除以整数并期望得到浮点答案,您可以按如下方式将j转换为浮点:

div = i / (float)j + div;

这将为您提供您想要的答案

它在这里起了作用:

div=i/j+div;

当在第二段代码中对
/
运算符求值时,两个操作数的类型均为
int
,因此执行整数除法以截断任何小数部分。当
j
声明为type
double
时,执行浮点除法且不发生截断。如果这两个操作数都是如果是
int
类型,则结果是一个
int
,小数部分被截断。非常感谢您的回答,它确实帮助了我很多….!但是如果我们在int值附近声明(float),它会变成float值吗?同样,如果我们声明(char)在int值附近是否显示ASCIIvalue@DharnieshPR是的!非常感谢你的回答,它真的帮了我很大的忙。@DharnieshPR很高兴我能帮上忙。如果你觉得有用的话,请随意回答。
div=i/j+div;