2
无效 RoundOffTest(双数)
{
    // 为了得到这个输出,你会将什么值传递给 RoundOffTest():
    // BEFORE number=1.785000 round=178.000000(向下取整)
    // 后数字=1.785000 舍入=179.000000(向上舍入)
    //
    // 它似乎向下舍入。
    // 但是第二行似乎将它向上取整。
    // 这不是不可能的吗?难道没有可能的数字你可以通过吗
    // 这个函数,看到那个输出了吗?或者有吗?

    NSLog(@"BEFORE number=%f round=%f (round down)", number, round(number * 100));
    双倍数 = 1.785000;  
    NSLog(@"AFTER NUMBER=%f round=%f (round up)", NUMBER, round(NUMBER * 100));

}
4

1 回答 1

0

设置number1.7849995,你会得到你看到的结果。请注意,%f它打印了 6 个小数位,并且输出被四舍五入到那个位数 - 所以1.7849994不起作用。

不四舍五入的格式化

要回答您的评论问题:使用NSNumberFormatter. 我认为所有的printf样式格式化程序都是圆形的。NSNumberFormatter提供7种不同的舍入模式。这是您的测试功能的修改版本:

void RoundOffTest(double number)
{
    NSNumberFormatter *formatter = [NSNumberFormatter new];
    [formatter setFormat:@"0.000000"];  // see docs for format strings
    [formatter setRoundingMode:NSNumberFormatterRoundFloor]; // i.e. truncate
    NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithDouble:number]];
    NSLog(@"%@\n", formatted);
    [formatter release];
}
于 2011-04-16T04:38:13.033 回答