我想这样做,因此我的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完成这个?
谢谢!
答案 0 :(得分:10)
我相信
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.usesSignificantDigits = YES;
formatter.maximumSignificantDigits = 3;
将完全按照您的意愿行事,即它将始终显示正好3位数字,无论是小数点前2位,小数点后1位或小数点后1位数,还是之后2位数。
答案 1 :(得分:4)
也许你也必须设置(不确定):
[distanceFormatter setUsesSignificantDigits: YES];
但在你的情况下,使用标准字符串格式可能要容易得多:
CGFloat yourNumber = ...;
NSString* stringValue = [NSString stringWithFormat: @"%.3f", yourNumber];
(注意:这将围绕最后一位数字)
答案 2 :(得分:2)
这是我写的一个小功能:
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];
}
在我的测试中,这很好用。