在NSNumberFormatter中禁用向上舍入(使用区域设置)

时间:2012-08-14 14:19:13

标签: iphone objective-c nsnumberformatter

我正在处理多个区域设置号码。例如:

  1. 1.234.567,89 - 德语
  2. 1'234'567.89 - 瑞士
  3. 1,234,567.89 - 美国
  4. 我的代码将小数点分隔符后面的最后一位数字向上舍入:

    NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [formatter setLocale:[NSLocale currentLocale]];
    [formatter setMinimumFractionDigits:2];
    [formatter setMaximumFractionDigits:2];
    
    double myValue = [[formatter numberFromString:@"123.458"] doubleValue];
    double myValue2 = [[formatter numberFromString:@"123.444"] doubleValue];
    
    NSString *rezult = [formatter stringFromNumber:[NSNumber numberWithDouble:myValue]];
    NSString *rezult2 = [formatter stringFromNumber:[NSNumber numberWithDouble:myValue2]];
    
    NSLog(@"rezult = %@", rezult);  //gives 123.46 - incorrect
    NSLog(@"rezult2 = %@", rezult2);//gives 123.44 - correct
    

    请建议如何防止四舍五入。

    请记住,我不能这样做:

    double aDouble = 1234.56789;
    NSString *stri = [NSString stringWithFormat:@"%.2f", aDouble];
    NSLog(@"%@", stri); //result is 1234.56 - correct (not rounded up to 1234.57)
    

    ...因为我必须使用* formatter设置* stri(见上文)。

    我想NSNumberFormatter必须有一些额外的设置,不是吗?

    提前致谢。

    编辑1

    解决方案:在声明NSNumberFormatter之后,还要说:

    [formatter setRoundingMode: NSNumberFormatterRoundDown];
    

    感谢@Price的快速解决方案。主题已关闭。

1 个答案:

答案 0 :(得分:3)

您可以添加:

[formatter setRoundingMode: NSNumberFormatterRoundDown];