NSNumberFormatter:显示0作为最后一个数字,从像25.0这样的字符串开始
我有一个字符串表示一个浮点数,例如2400.0
。我想将其格式化为数字(2,400.0
),我需要在数字符号后面保留零。NSNumberFormatter:显示0作为最后一个数字,从像25.0这样的字符串开始
NSString* theString = @"2400.0";
// I convert the string to a float
float f = [theString floatValue];
// here I lose the digit information :(and it ends up with 2400 instead of 2400.0
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setUsesSignificantDigits:YES];
[formatter setMinimumFractionDigits:1];
[formatter setMaximumFractionDigits:2];
[formatter setLocale:[NSLocale currentLocale]];
NSString *result = [formatter stringFromNumber:@(f)];
的的result
NSLog
是2,400
,而我需要2,400.0
我怎样才能获得正确的字符串?
您可能想要将minimumFractionDigits
设置为1(以及您的maximumFractionDigits
也是这种情况)。
你也可能不想使用有效数字。下面的代码产生所需的输出:
NSString *theString = @"2400.0";
float f = [theString floatValue];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumFractionDigits:1];
[formatter setMaximumFractionDigits:1];
[formatter setLocale:[NSLocale currentLocale]];
NSLog(@"%@", [formatter stringFromNumber:@(f)]);
下面解决问题
NSString *formatString = @"0,000.0";
[formatter setPositiveFormat:formatString];
将被用于格式化0的小数后的数字。它也适用于负数。
您应该根据小数点前后浮点数的位数动态更改格式字符串。
希望它有帮助。
我需要保留区域设置信息。这不是一个解决方案。许多国家使用不同的格式,如'@“0.000,0”' – MatterGoal
同意,这不是一个通用的解决方案。然而,它提供了问题“需要一个格式为0,000.0”的通用解决方案,我们需要设置区域设置为格式化程序。 –
容易,
然后你去显示它只是这样做:
myLabel.text = @"%0.1f", f;
的问题是,从字符串的第一个转换过程中漂浮我失去了” .0" 的信息。我已经尝试设置'minimumFractionDigits'。顺便说一句我把它添加到我的代码示例更加精确。 – MatterGoal
我不明白你如何失去'.0'(我能理解的另一个分数,但'.0'?)无论如何,你需要两个数字格式化器:一个用于输入,另一个用于输出。 – DarkDust
哦,既然你设置了'setUsesSignificantDigits:YES',你可能需要设置['minimumSignificantDigits'](https://developer.apple.com/library/mac/documentation/cocoa/reference/Foundation/Classes/NSNumberFormatter_Class/ Reference/Reference.html#// apple_ref/occ/instm/NSNumberFormatter/setMinimumSignificantDigits :)(参见[this question](http://*.com/questions/1322348/what-describes-nsnumberformatter-maximumsignificantdigits))或把它们关掉。 – DarkDust