【问题标题】:Accuracy issues with NSNumberFormatterNSNumberFormatter 的准确性问题
【发布时间】:2013-12-26 21:50:23
【问题描述】:

我的问题是我目前正在使用NSNumberFormatterNSNumberFormatterDecimalStyle。我使用它是因为我想让逗号分隔每三个数字的数字,就像我把它变成一个字符串时写它一样。这很好用,但是小数位的精度很小。它只精确到千分之一。对于我的应用程序,我需要它精确到小数点后 12 位。我可以很容易地使用 %g 格式说明符,只需将 %.12g 放入字符串格式,但我不知道如何使用 NSNumberFormatter 来实现这一点。我尝试删除格式:NSNumberFormatterDecimalStyle 但这只会使我的数字成为整数。任何帮助,将不胜感激。

这是我目前用来格式化double: number的代码。

NSNumber *theNumber = [NSNumber numberWithDouble:number];
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[num setNumberStyle:NSNumberFormatterDecimalStyle];
[num setGroupingSeparator:@","];

【问题讨论】:

    标签: ios objective-c nsnumber nsnumberformatter


    【解决方案1】:

    确保您使用的起始值是双精度数,而不是浮点数。

    那么,在使用格式化程序进行转换之前,您是否尝试过在格式化程序上设置 maximumFractionDigits?

    【讨论】:

      【解决方案2】:

      只需设置小数点右侧的最小值或位数:

      - (void)setMinimumFractionDigits:(NSUInteger)number

      例子:

      NSNumber *number = @123456.654321;
      NSNumberFormatter *formatter = [NSNumberFormatter new];
      [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
      [formatter setGroupingSeparator:@","];
      [formatter setMinimumFractionDigits:12];
      NSString *stringNumber = [formatter stringFromNumber:number];
      NSLog(@"Number: '%@'", stringNumber);
      

      NSLog 输出

      编号:'123,456.654321000000'

      【讨论】:

      • 谢谢,我不知道最小小数位数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2017-11-18
      • 2017-02-26
      相关资源
      最近更新 更多