2013-10-16 133 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。