2015-07-10 61 views
0

我想要分割的两个int值,但将其划分后我收到只有一个值是0 以下是我的公式:获得分割后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; 
} 
+1

您认为'RH'的价值是什么? (注意它是一个int,整数除法的结果......)145/199是* not * 72. –

+0

但是(145/199)* 100 = 72对于int –

+0

145/172是0 btw – Rusty

回答

0

你可以重写你的表情让非0结果:

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

同样的事情需要为RvalueVRvalueT工作要做。

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

+0

否我想乘以(A1/M1)* 100 ...我不能改写为100 * A1/M1,但是它也不起作用 –

0

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

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

顺便说M1>0意味着它总是M1 != -1如此。

3

老实说,这是新的程序员谁试图执行integer division当他们真正的意思(或至少他们认为)使用浮点除法一个常见的错误。

/ Operator

当你把两个整数,结果是总是整数。对于 例如,7/3的结果是2

这就是为什么当你计算145/199结果将是0,不0,728643216080402

取而代之的是,多你145100第一然后将结果分为199。由于这仍然执行整数除法,它忽略结果的小数部分,这将是7272,8643216080402等。

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

谢谢,为了实现我的错误....现在它的工作 –

+0

@AniketPanke很高兴听到它。 –

0

试试这个,你需要的值convertfloat得到确切的答案。

您应该将返回的分区值存储在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;