将NSNumber向上取整

5
NSNumberFormatter *formatNumber = [[NSNumberFormatter alloc] init];
[formatNumber setRoundingMode:NSNumberFormatterRoundUp];
[formatNumber setMaximumFractionDigits:0];

NSNumber *height = [formatNumber numberFromString:self.heightField.text];
NSNumber *width = [formatNumber numberFromString:self.widthField.text];
NSNumber *depth = [formatNumber numberFromString:self.depthField.text];
NSNumber *weight = [formatNumber numberFromString:self.weightField.text];

NSLog(@"height %@", height);
NSLog(@"width %@", width);
NSLog(@"depth %@", depth);
NSLog(@"weight %@", weight)

我正在试图将UITextField中的高度、宽度、深度和重量四舍五入到最近的整数,但仍显示整个小数点。 有人能帮助我调整代码使其四舍五入吗?

谢谢。


可能是此问题的重复:如何将NSNumber四舍五入为零位小数 - Sam B
3个回答

10

没有繁琐的仪式,使用现代化的Objective C语言:

NSNumber *roundedUpNumber = @(ceil(self.field.text.doubleValue));

哇哦……太棒了 :) - TonyMkenu

5

您可以使用此功能

NSString *numericText = self.field.text;
double doubleValue = [numericText doubleValue];
int roundedInteger = ceil(doubleValue);
NSNumber *roundedUpNumber = [NSNumber numberWithInt:roundedInteger];

概述:

  • doubleValue将您的字段转换为double
  • ceil将双精度数向上舍入到最近的整数
  • 将其强制转换为整数可以将双精度数转换为整数
  • 使用整数构建NSNumber

2
文档相当混乱,并让人误以为在NSNumberFormatter实例上设置的限制适用于字符串->数字和数字->字符串转换。然而,实际情况并非如此,正如The Boffin Lab的一篇文章所述
“很容易,我们只需设置NSNumberFormatter即可处理它。然而,经过一些测试和与苹果技术支持的核实后,似乎这仅适用于将数字转换为文本的情况。文件没有明确说明在这种情况下,“输入”特指NSNumber,并且在另一个方向的转换中不使用此设置...”
因此,使用标准的C函数(如ceil()round()floor()等)来调整数字。
另一种选择是子类化NSNumberFormatter,以便它在两个方向上都符合条件。
最后,如果您真的喜欢慢速代码,或者只想快速模拟一些东西,可以应用格式化程序三次:字符串->数字->字符串->数字
它看起来像这样:*
NSNumber *n = [formatNumber numberFromString:
                  [formatNumber stringFromNumber:
                      [formatNumber numberFromString:@"1.2345"]]];

*孩子们,在家里不要尝试这个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接