【问题标题】:Loosing fractional zeros when formatting a NSDecimalNumber with NSNumberFormatter使用 NSNumberFormatter 格式化 NSDecimalNumber 时丢失小数零
【发布时间】:2014-02-25 13:00:28
【问题描述】:

我使用以下代码通过添加千分隔点来格式化字符串数字:

NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString:@"0.000"];
NSLog(@"decimalNumber = %@",decimalNumber);

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setGroupingSeparator:@"."];
[numberFormatter setGroupingSize:3];
[numberFormatter setUsesGroupingSeparator:YES];
[numberFormatter setDecimalSeparator:@","];
[numberFormatter setMaximumFractionDigits:9];

NSString *finalString = [numberFormatter stringFromNumber:decimalNumber];
NSLog(@"finalString = %@",finalString);

如果我想格式化 @"0.000" 字符串(不一定是 3 个零,可以少也可以多),我有以下日志输出:

decimalNumber = 0
finalString = 0

但我想要的是保持分数为零,即在这种情况下,我的字符串必须保持不变。当我创建NSDecimalNumber 时,我发现这些零丢失了,我需要另一种方法。会是什么?

【问题讨论】:

    标签: ios objective-c nsnumberformatter nsdecimalnumber


    【解决方案1】:

    添加这个:

    [numberFormatter setMinimumFractionDigits:3];
    

    【讨论】:

    • 还有[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    • 只有在点后正好有三个零时才有用,但这只是一个例子。当我有例如时它不起作用:@“0.0000”
    • 是的,3 只是一个例子。您可以将其替换为不同的数字,甚至可以用变量替换,如:[numberFormatter setMinimumFractionDigits:significantDigitsAfterDecimalPoint]; 但格式化程序无法告诉您可能需要多少个零,因此您需要跟踪并告诉它。
    【解决方案2】:

    Caleb 的回答帮助我解决了这个问题,我想分享一下我是如何彻底解决这个问题的:

    1.首先我添加了这个方法:

    - (uint) fractionalNumberCountFromString:(NSString*) numberString
    {
        NSRange fractionalPointRange = [numberString rangeOfString:@"."];
        if (fractionalPointRange.location == NSNotFound)
        {
            return 0;
        }
        return numberString.length-fractionalPointRange.location-1;
    }
    

    2.其次,我在设置NSNumberFormatter的位置添加了这一行:

    [numberFormatter setMinimumFractionDigits:[self fractionalNumberCountFromString:@"0.000"]];
    

    【讨论】:

    • 不错的电影,不错的解决方案。
    【解决方案3】:

    试试这个方法

    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"US"];
    
    NSNumberFormatter *formatterN = [[NSNumberFormatter alloc] init];
    [formatterN setMaximumFractionDigits:3];
    [formatterN setMinimumFractionDigits:3];
    [formatterN setLocale:usLocale];
    
    [formatterN stringFromNumber:decimalNumber];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多