4

我需要将一个数字四舍五入,比如 543 到百位或十位。它可能是其中一个,因为它是游戏的一部分,而这个阶段可以要求你做一个或另一个。

例如,它可以询问“四舍五入到最接近的十位”,如果数字是 543,他们就必须输入 540。

但是,我没有看到可以指定要四舍五入的目标位置值的函数。我知道有一个简单的解决方案,但我现在想不出一个。

据我所知,该round函数会舍入最后一位小数?

谢谢

4

3 回答 3

7

四舍五入到 100 位

NSInteger num=543;

NSInteger deci=num%100;//43
if(deci>49){
    num=num-deci+100;//543-43+100 =600
}
else{
    num=num-deci;//543-43=500
}

四舍五入到第 10 位

NSInteger num=543;

NSInteger deci=num%10;//3
if(deci>4){
    num=num-deci+100;//543-3+10 =550
}
else{
    num=num-deci;//543-3=540
}

编辑:试图将上述合并为一个:

NSInteger num=543;

NSInteger place=100; //rounding factor, 10 or 100 or even more.
NSInteger condition=place/2;

NSInteger deci=num%place;//43
if(deci>=condition){
    num=num-deci+place;//543-43+100 =600. 
}
else{
    num=num-deci;//543-43=500
}
于 2013-03-24T05:53:19.217 回答
1

您可以只在代码中使用算法:

例如,假设您需要将一个数字四舍五入到百位。

int c = 543
int k = c % 100
if k > 50
   c = (c - k) + 100
else 
   c = c - k
于 2013-03-24T05:52:56.183 回答
1

要对数字进行四舍五入,您可以使用取模运算符 %。

模运算符为您提供除法后的余数。

所以 543 % 10 = 3,而 543 % 100 = 43。

例子:

int place = 10;
int numToRound=543;
// Remainder is 3
int remainder = numToRound%place;
if(remainder>(place/2)) {
    // Called if remainder is greater than 5. In this case, it is 3, so this line won't be called.
    // Subtract the remainder, and round up by 10.
    numToRound=(numToRound-remainder)+place;
}
else {
    // Called if remainder is less than 5. In this case, 3 < 5, so it will be called.
    // Subtract the remainder, leaving 540
    numToRound=(numToRound-remainder);
}
// numToRound will output as 540
NSLog(@"%i", numToRound);

编辑:我的原始答案在准备好之前就提交了,因为我不小心按了一个键来提交它。哎呀。

于 2013-03-24T06:02:06.190 回答