我有一个代表浮点数的字符串,例如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
如何获得正确的字符串?
答案 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"]);