我试图对数字进行舍入并转换为字符串,以增强Objective-C程序的输出。
我有一个浮点值,我想四舍五入到最接近的.5,然后用它来设置标签上的文本。
例如:
1.4将是以下字符串:1.5
1.2将是以下字符串:1
0.2将是一个字符串:0
我花了一段时间在Google上寻找答案,但是作为Objective-C的菜鸟,我不确定要搜索什么!因此,我非常感谢朝着正确方向的指针!
谢谢,Ash
Answers:
感谢大家的指点,我设法提出了一个解决方案:
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];
上面的代码适用于我抛出的测试用例,但是如果有人知道更好的方法,我很想听听它!
使用lroundf()将浮点数舍入为整数,然后将整数转换为字符串。
lroundf()
将浮点数舍入为整数,并将其返回为长整数(可以将其转换为字符串stringWithFormat:
)。
我建议您考虑使用NSNumberFormatter。
一种简单的方法:
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
NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber];
我需要能够四舍五入到特定数字(不必四舍五入为整数)。我创建了一个NSNumber
类别(基于Ash的answer),并向其中添加了以下方法:
- (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];