Iphone NSNumberFormatter最多显示3位数字

Iphone NSNumberFormatter最多显示3位数字,iphone,nsnumberformatter,significant-digits,Iphone,Nsnumberformatter,Significant Digits,我想让我的一个UILabel最多只能显示3位数字。所以,如果关联值是3.224789,我想看看3.22。如果值是12.563,我想看12.5,如果值是298.38912,我想看298。我一直在尝试使用NSNumberFormatter来实现这一点,但当我将最大有效位设置为3时,小数点后总是有3位。代码如下: NSNumberFormatter *distanceFormatter = [[[NSNumberFormatter alloc] init] autorelease]; [distanc

我想让我的一个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实现这一点的方法


谢谢

这是我写的一个小函数:

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];
}

在我的测试中,这很好。

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

[distanceFormatter SetUseSignificantDigits:是]

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

CGFloat yourNumber = ...;
NSString* stringValue = [NSString stringWithFormat: @"%.3f", yourNumber];
(注意:这将四舍五入最后一位)

我相信

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

将完全按照您的要求进行操作,即它将始终精确显示3位数字,是小数点前2位,小数点后1位,还是小数点前1位,小数点后2位。

感谢您理解此问题。“有效位数”和“小数点右边的位数”之间存在差异。是的,这非常有效。将
UseSignificantDigits
标志设置为YES是OP解决方案的关键。我刚刚使用了它,它确实可以跨小数点工作,例如,它可以将$19.17转换为$19.20。请检查我的问题。在斯威夫特,这对我不起作用