【问题标题】:NSNumberFormatter to show a maximum of 3 digitsNSNumberFormatter 最多显示 3 位数字
【发布时间】:2012-03-23 16:03:45
【问题描述】:

我想这样做,所以我的 UILabel 之一最多只能显示 3 位数字。因此,如果关联值为 3.224789,我希望看到 3.22。如果值为 12.563,我希望看到 12.5,如果值为 298.38912,那么我希望看到 298。我一直在尝试使用 NSNumberFormatter 来完成此操作,但是当我将最大有效位数设置为 3它总是在小数点后有 3 位数字。代码如下:

NSNumberFormatter *distanceFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[distanceFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[distanceFormatter setAlwaysShowsDecimalSeparator:NO];
[distanceFormatter setMaximumSignificantDigits:3];

我一直认为“有效数字”是指小数点前后的所有数字。无论如何,有没有办法使用 NSNumberFormatter 来完成这个?

谢谢!

【问题讨论】:

    标签: iphone nsnumberformatter significant-digits


    【解决方案1】:

    我相信

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.usesSignificantDigits = YES;
    formatter.maximumSignificantDigits = 3;
    

    将完全按照您的意愿进行操作,即始终显示 3 位数字,无论是小数点前 2 位和小数点后 1 位,还是小数点前 1 位和小数点后 2 位。

    【讨论】:

    • 是的,这很好用。将 usesSignificantDigits 标志设置为 YES 是 OP 解决方案的关键。我刚刚使用了这个,它确实可以跨越小数点,例如它将 19.17 美元转换为 19.20 美元。
    • 请检查我的问题stackoverflow.com/questions/35112206/…。它在 Swift 中对我不起作用
    【解决方案2】:

    也许您还必须设置(虽然不确定):

    [distanceFormatter setUsesSignificantDigits: YES];

    但在您的情况下,使用标准字符串格式可能要容易得多:

    CGFloat yourNumber = ...;
    NSString* stringValue = [NSString stringWithFormat: @"%.3f", yourNumber];
    

    (注意:这将四舍五入最后一位)

    【讨论】:

      【解决方案3】:

      这是我写的一个小函数:

      int nDigits(double n)
      {
          n = fabs(n);
          int nDigits = 0;
          while (n > 1) {
              n /= 10;
              nDigits++;
          }
      
          return nDigits;
      }
      
      NSString *formatNumber(NSNumber *number, int sigFigures)
      {
          double num = [number doubleValue];
          int numDigits = nDigits(num);
      
          NSString *format = [NSString stringWithFormat:@"%%%i.%ilf", sigFigures -= numDigits, sigFigures];
      
          return [NSString stringWithFormat:format, num];
      }
      

      在我的测试中,这很好用。

      【讨论】:

      • 感谢您理解这个问题。 “有效数字”和“小数点右边的位数”是有区别的。
      猜你喜欢
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多