NSNumberFormatter:从25.0之类的字符串开始显示零作为最后一位数

时间:2014-01-31 08:54:30

标签: objective-c nsnumberformatter nsformatter

我有一个代表浮点数的字符串,例如2400.0。我想将其格式化为数字(2,400.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)];

NSLog的{​​{1}}为result,而我需要2,400

如何获得正确的字符串?

4 个答案:

答案 0 :(得分:4)

您可能希望将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)]);

答案 1 :(得分:0)

以下解决了问题

NSString *formatString = @"0,000.0";
[formatter setPositiveFormat:formatString];

小数点后的0的数字将用于格式化。它也适用于负数。

您应该根据小数点前后浮点值的位数动态更改格式字符串。

希望它有所帮助。

答案 2 :(得分:0)

简单,

然后你去显示它只是这样做:

myLabel.text = @"%0.1f", f;

答案 3 :(得分:0)

除了minimumFractionDigits之外,还使用maximumFractionDigits

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.minimumFractionDigits = 1;
formatter.maximumFractionDigits = 1;

XCTAssert([[formatter stringFromNumber:@(2400.0)] isEqualToString:@"2400.0"]);
XCTAssert([[formatter stringFromNumber:@(2400.1)] isEqualToString:@"2400.1"]);