2013-10-16 56 views
0

試圖找到一種方法,只使用整數類型進行簡易舍入。發現了以下解決方案:整數arithemetic舍入

例1 - 圍捕

Value1=260 
Value2=305 

Tmp1=(10 * Value1)/Value2 = 8.52 = 8 (integer) 
Tmp1=(Tmp1 + 5)/10 = (8 + 5)/10 = 1.3 = 1 (integer) 

例2 - 捨去

Value1=76 
Value2=305 

Tmp1=(10 * Value1)/Value2 = 2,49 = 2 (integer) 
Tmp1=(Tmp1 + 5)/10 = (2 + 5)/10 = 0.7 = 0 (integer) 

是否有更好的方法來做到這一點?

也許這可以幫助有相同問題的其他人。

回答

0

哪種編程語言?通常你有完成這些操作的全部功能。 Java示例:

//.00 added to get 2 decimals 
double Value1=260.00; 
double Value2=305.00; 

int Tmp1,Tmp2; 

//To round from 5,1 to 5: 

Tmp1 = (int) Math.floor(Value1/Value2); 

//To ceil from 5,1 to 6: 

Tmp1 = (int) Math.ceil(Value1/Value2); 
+0

ansi c - 在嵌入式cpu上運行 - 根本沒有浮點單元在大多數情況下,我儘量避免使用c庫,因爲如果您需要將完整的庫添加到代碼中,即使您只想使用一個或兩個功能。 –

0

希望這有助於:

int round(float myValue) { [Test Values: 0.51, 0.49, 2.7, 3.3] 
int rounded=myValue*2 [1,0,5,6] 
int toAdd=myValue % 2 [1,0,1,0] 
rounded=rounded/2  [0,0,2,3] 
rounded=rounded+toAdd [1,0,3,3] 
return rounded 
} 
0

假設數字是無符號數,並假設圓了上半的行爲期望,事情很容易,只要通過以下兩種條件適用。如果除數已知爲2的倍數,則只需計算(n /(d/2)+1)/ 2。如果除數不是2的倍數,但已知股息不是太大,則計算((2 * n/d + 1)/ 2)。如果兩個條件都不適用,則需要分別處理更多case。