2015-07-10 60 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;