【问题标题】:How to round Decimal values in Objective C如何在Objective C中舍入十进制值
【发布时间】:2011-03-15 16:57:27
【问题描述】:

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

我得到这样的值

12.010000 12.526000 12.000000 12.500000

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

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

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

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

谁能帮帮我

谢谢

【问题讨论】:

  • 这些值是什么? float? NS号码? NSDecimalNumber? “显示”是什么意思?转换为 NSString?打印到控制台? NSLog?
  • 实际上我将它作为 NSString 我可以将它们转换为浮点数。显示意味着我必须通过将它们转换为 nsstring 来在视图中显示这些值

标签: objective-c


【解决方案1】:

显然 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;
}

【讨论】:

    【解决方案2】:
    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上的查询

    【讨论】:

    • 嗨萨达特感谢您的回答。我尝试了这段代码,但是当我传递浮点值 12.526000 时,我在“NSString *numberString”中得到值 12.57,但我必须在字符串值中得到 12.526,与 12.010000 相同,我得到 12.02 但我有得到 12.01。谢谢
    • 这一行的变化:[formatter setMaximumFractionDigits:2];放置 3 而不是 2。
    【解决方案3】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      相关资源
      最近更新 更多