如何在Objective C中舍入十进制值

时间:2010-07-14 06:40:54

标签: objective-c

这可能是一个简单的问题,但我无法找到逻辑。

我得到像这样的值

12.010000    12.526000    12.000000    12.500000

如果我得到值12.010000,我必须显示12.01

如果我得到12.526000的值,我必须显示12.526

如果我得到值12.000000我必须显示12

如果我得到12.500000的值,我必须显示12.5

任何人都可以帮帮我

谢谢

3 个答案:

答案 0 :(得分:4)

试试这个:

[NSString stringWithFormat:@"%g", 12.010000]
[NSString stringWithFormat:@"%g", 12.526000]
[NSString stringWithFormat:@"%g", 12.000000]
[NSString stringWithFormat:@"%g", 12.500000]

答案 1 :(得分:3)

float roundedValue = 45.964;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];

NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:roundedValue]];

NSLog(numberString);
[formatter release];

您可能需要进行一些修改 -

// You can specify that how many floating digit you want as below 
[formatter setMaximumFractionDigits:4];//2];

// You can also round down by changing this line 
[formatter setRoundingMode: NSNumberFormatterRoundDown];//NSNumberFormatterRoundUp];

参考:StackOverFlow

上的查询

答案 2 :(得分:0)

显然,taskinoor的解决方案是最好的,但你提到你找不到解决它的逻辑......所以这就是逻辑。您基本上以相反的顺序循环遍历字符,查找非零或句点字符,然后根据您找到任一字符的位置创建子字符串。

-(NSString*)chopEndingZeros:(NSString*)string {
    NSString* chopped = nil;
    NSInteger i;
    for (i=[string length]-1; i>=0; i--) {
        NSString* a = [string substringWithRange:NSMakeRange(i, 1)];
        if ([a isEqualToString:@"."]) {
            chopped = [string substringToIndex:i];
            break;
        } else if (![a isEqualToString:@"0"]) {
            chopped = [string substringToIndex:i+1];
            break;
        }
    }
    return chopped;
}
相关问题