2

我发现了一个有趣的问题,互联网上没有描述,甚至在苹果文档中也有误导性。有什么区别:

kCFNumberFormatterRoundCeiling

kCFNumberFormatterRoundFloor

kCFNumberFormatterRoundDown

kCFNumberFormatterRoundUp

kCFNumberFormatterRoundHalfEven

kCFNumberFormatterRoundHalfDown

kCFNumberFormatterRoundHalfUp

?

kCFNumberFormatterRoundCeiling 解释与 kCFNumberFormatterRoundUp 相同,但它们的工作方式不同,在 kCFNumberFormatterRoundFloor 和 kCFNumberFormatterRoundDown 中的情况相同

4

1 回答 1

0

文档确实模棱两可。两者kCFNumberFormatterRoundFloorkCFNumberFormatterRoundDown都记录为

使用适当的小数位数向下舍入到下一个较大的数字。

一个小测试表明,这些舍入模式对负数给出不同的结果。

kCFNumberFormatterRoundFloor行为类似于floor()函数。它总是四舍五入到较小(或相等)的值。另一方面kCFNumberFormatterRoundDown,“向零”舍入,即它返回一个数字,其绝对值小于或等于输入的绝对值。

示例:(使用NSNumberFormatter

NSNumberFormatter *f1 = [[NSNumberFormatter alloc] init];
[f1 setMaximumFractionDigits:0];
[f1 setRoundingMode:NSNumberFormatterRoundFloor];

NSNumberFormatter *f2 = [[NSNumberFormatter alloc] init];
[f2 setMaximumFractionDigits:0];
[f2 setRoundingMode:NSNumberFormatterRoundDown];

double x = -1.5;
NSLog(@"%@, %@", [f1 stringFromNumber:@(x)], [f2 stringFromNumber:@(x)]);
// Output: -2, -1

x = + 3.5;
NSLog(@"%@, %@", [f1 stringFromNumber:@(x)], [f2 stringFromNumber:@(x)]);
// Output: 3, 3

同样,kCFNumberFormatterRoundCeiling返回一个大于或等于输入的值(如ceil()),并kCFNumberFormatterRoundUp“远离零”四舍五入。

于 2013-06-28T11:22:48.857 回答