【问题标题】:How to format a number such a way that there is always one fractional digit?如何格式化一个数字,使其始终有一个小数位?
【发布时间】:2010-09-27 20:43:44
【问题描述】:

例如,我有如下浮点值:

0.2 1.5 2.0 3.0 10.0 52.5 60.0

在任何情况下,我都非常想要一位小数。即使数字正好是 1,我也希望它显示为 1.0

我尝试像这样设置一个 NSNumberFormatter,但它不起作用:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setAlwaysShowsDecimalSeparator:NO];
[formatter setAllowsFloats:YES];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setMinimumFractionDigits:1];

[formatter setUsesSignificantDigits:YES];
[formatter setMinimumSignificantDigits:2];

[formatter setNumberStyle:kCFNumberFormatterDecimalStyle];

显示 0.2, 5.0, 5.5, 9.0,

但是当它达到 10 时,它会显示 10、10.3、11、11.9、15,... 等等。 这是 NSNumberFormatter 做不到的吗?

【问题讨论】:

    标签: iphone nsnumberformatter


    【解决方案1】:

    setAlwaysShowsDecimalSeparator: 控制接收器是否总是显示小数点分隔符,即使是整数。

    尝试将此设置为 YES

    【讨论】:

    • 它会强制使用小数分隔符,但它不能确保分隔符后总是有一个小数位......它会产生类似 10. 或 15. 但不是 10.0 或 15.5 .. .
    【解决方案2】:

    试试这个?

    NSString * f= [NSString stringWithFormat:@"%.01f",(float)10];

    【讨论】:

    【解决方案3】:

    我无法使用madmi3 解决方案,因为我需要动态设置 NSNumberFormatter 的语言环境。

    所以最终使用了以下解决方案:

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.alwaysShowsDecimalSeparator = YES; // This will produce results like 10. for intergers
    formatter.maximumFractionDigits = 1;
    formatter.locale = [NSLocale localeWithLocaleIdentifier:@"pt"]; // I get this locale dinamically
    
    NSString *formattedNumber = [formatter stringFromNumber:[NSNumber numberWithInteger:10]];
    
    //Check this formattedNumber is ending with the separator
    //If so, then append one more 0.
    if ([formattedNumber hasSuffix:[formatter.locale objectForKey:NSLocaleDecimalSeparator]])
    {
        formattedNumber = [formattedNumber stringByAppendingString:@"0"];
    }
    
    NSLog(@"%@", formattedNumber);
    

    【讨论】:

      猜你喜欢
      • 2011-01-01
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2020-05-25
      相关资源
      最近更新 更多