在Objective-C中舍入数字

我正在尝试做一些数字四舍五入和转换为一个string来增强Objective-C程序的输出。

我有一个浮点值,我想四舍五入到最接近的.5,然后用它来设置标签上的文本。

例如:

1.4将是一串:1.5

1.2将是一串:1

0.2将是一串:0

我花了一段时间在Google上寻找答案,但作为Objective-C的noob,我不知道要search什么! 所以,我真的很欣赏一个正确的方向指针!

谢谢,Ash

感谢大家的指点,我设法提出了一个解决scheme:

float roundedValue = round(2.0f * number) / 2.0f; NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setMaximumFractionDigits:1]; [formatter setRoundingMode: NSNumberFormatterRoundDown]; NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:roundedValue]]; [formatter release]; 

上面的这些testing用例是我抛弃它的,但是如果有人知道更好的方法来做到这一点,我会有兴趣听到它!

 float floatVal = 1.23456; 

四舍五入

 int roundedVal = lroundf(floatVal); NSLog(@"%d",roundedVal); 

围捕

 int roundedUpVal = ceil(floatVal); NSLog(@"%d",roundedUpVal); 

舍入

 int roundedDownVal = floor(floatVal); NSLog(@"%d",roundedDownVal); 
 NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f]; 

使用lroundf()将float四舍五入为整数,然后将整数转换为string。

 NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)]; 

我build议看看使用NSNumberFormatter 。

 NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber]; 

以下技术在我的财务应用程序工作。

  NSString *dd=[NSString stringWithFormat:@"%0.2f",monthlyPaymentCalculated]; monthlyPaymentCalculated=[dd doubleValue]; self.monthlyPaymentCritical=monthlyPaymentCalculated; 

什么是首先是用%0.2f四舍五入,并将其存储在NSString中,然后我简单地把它再次转换成双精度,结果是对我的计算。

一个简单的方法:

 float theFloat = 1.23456; int rounded = roundf(theFloat); NSLog(@"%d",rounded); int roundedUp = ceil(theFloat); NSLog(@"%d",roundedUp); int roundedDown = floor(theFloat); NSLog(@"%d",roundedDown); // Note: int can be replaced by float 

我需要能够四舍五入到一个特定的数字(不一定是整数)。 我做了一个NSNumber类(基于Ash的答案 ),并添加了以下方法:

 - (NSString *)stringByRounding:(NSNumberFormatterRoundingMode)roundingMode toPositionRightOfDecimal:(NSUInteger)position { NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; [formatter setMaximumFractionDigits:position]; [formatter setRoundingMode:roundingMode]; NSString *numberString = [formatter stringFromNumber:self]; return numberString; } 

这使我可以像这样使用它:

 [aNumber stringByRounding:NSNumberFormatterRoundUp toPositionRightOfDecimal:2]; 

我可以使用它作为第二个参数传入0来舍入到整数:

 [aNumber stringByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0]; 

有了这些函数,你可以舍入任何值。如果你使用p = 2,你会得到偶数。

 float RoundTo(float x, float p) { float y = 1/p; return int((x+(1/(y+y)))*y)/y; } float RoundUp(float x, float p) { float y = 1/p; return int((x+(1/y))*y)/y; } float RoundDown(float x, float p) { float y = 1/p; return int(x*y)/y; }