在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; }