整数运算舍入

时间:2013-10-16 10:04:05

标签: integer integer-arithmetic

试图找到一种只使用整数类型进行简单舍入的方法。找到了以下解决方案:

示例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)

有更好的方法吗?

也许这可以帮助其他有同样问题的人。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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
}

答案 2 :(得分:0)

假设数字是无符号数,并且假设需要上半部分行为,如果两个条件中的任何一个适用,事情就很容易。如果已知除数是2的倍数,则只需计算(n /(d / 2)+1)/ 2。如果不知道除数是2的倍数但已知红利不会太大,则计算((2 * n / d + 1)/ 2.如果两种条件都不适用,则需要单独处理更多例。