在对int值进行除法运算后获取0值

本文关键字:获取 运算 int 在对 除法 | 更新日期: 2023-09-27 18:02:05

我想对这两个int值进行除法,但对它们进行除法后,我只得到一个值,即0。以下是我的公式:

int RH=(A1/M1)*100(where A1=145 and M1=199),其中RH的值应该是72,但我得到了0,有人能帮我吗?

以下是我的代码:

int RvalueH,RvalueV,RvalueT;
if((M1!=-1 || M1>0) && (M2!=-1 || M2>0) && (M3>0 || M3!=-1))
{
    int RH = (A1 / M1);
    int RV = A2 / M2;
    int RT = A3 / M3;
    RvalueH=RH*100;
    RvalueV=100*RV;
    RvalueT=100*RT;
}

在对int值进行除法运算后获取0值

老实说,对于那些试图执行整数除法的新程序员来说,这是一个常见的错误,而他们实际上打算(或至少认为(使用浮点除法。

来自/操作员

当您将两个整数除法时,结果是始终一个整数。对于例如,7/3的结果是2。

这就是为什么当您计算145 / 199时,结果将是0,而不是0,728643216080402等。

相反,将145100相乘,首先,然后将结果除以199。由于这个仍然执行整数除法,它忽略了结果的小数部分,它将是72而不是72,8643216080402

int A1 = 145, M1 = 199;
int RH = (A1 * 100) / M1; // RH will be 72

您可以重写表达式以获得非0结果:

  int RH = 100 * A1 / M1;
  RvalueH = RH;

对于CCD_ 13和CCD_。

代码中的问题是RH = (A1 / M1)将产生0,因为它是整数除法。与100相乘首先避免了结果变成0

试试这个,你需要convert的值到float才能得到确切的答案。

您应该将除法的返回值存储在float变量中,以允许使用decimal points进行编号。由于int将不保持decimal point之后的值。

float RvalueH,RvalueV,RvalueT;
int A1 = 145;
int M1 = 199;
float RH =  (float)A1 /(float) M1;
RvalueH = RH*100;

使用double,四舍五入为零,然后转换为int

例如var result = Convert.ToInt(Math.Round((double)R1/M1,0));

顺便说一下,CCD_ 28意味着它总是CCD_ 29为真。