围绕NSNumber

时间:2014-06-12 19:47:09

标签: ios rounding nsnumber

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的高度,宽度,深度和重量四舍五入到最接近的整数,但它仍然显示整个小数点。 有人可以协助我的代码进行整理吗?

THX。

3 个答案:

答案 0 :(得分:10)

没有仪式和现代目标C:

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

答案 1 :(得分:5)

您可以使用此

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

要点:

  • doubleValue会将您的字段转换为double
  • ceil将double加倍到最接近的整数
  • cast to int将double转换为整数
  • 从整数构造NSNumber。

答案 2 :(得分:2)

文档相当混乱,听起来像您在NSNumberFormatter实例上设置的限制适用于string-> number和number->字符串转换。但事实并非如此,正如a The Boffin Lab post所描述的那样:

  

很简单,我们只需设置NSNumberFormatter即可为我们处理。   但是,对Apple Technical进行了一些测试和一些检查   稍后支持它似乎只适用于转换   数字到文本。文件中没有说明这一点   case'input'具体表示NSNumber,此设置为   在向另一个方向转换时不使用...

因此,请使用ceil()round()floor()等标准C函数来调整数字。

另一种方法是将NSNumberFormatter子类化,使其在两个方向上都遵守标准。

最后,如果你真的喜欢慢速代码,或者你只是想要模拟一些东西,你可以将格式化器应用三次:string-> number-> string-> number

看起来像 *

NSNumber *n = [formatNumber numberFromString:
                  [formatNumber stringFromNumber:
                      [formatNumber numberFromString:@"1.2345"]]];

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