I have a float number in a string, I need to add commas to every three digits of the number.

Here is what I had tried,

NSString *mystring =@"20090809.99";
float fl = [mystring floatValue];
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSLog(@"%@ ", [formatter stringFromNumber:[NSNumber numberWithFloat:fl]]);

I need the result as 20,090,809.99. What should I change in my code?

有帮助吗?

解决方案 3

How about this:

NSString *mystring =@"20090809.99";
NSNumber *number = [NSDecimalNumber decimalNumberWithString:mystring];    
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSLog(@"Formatted float: %@ ", [formatter stringFromNumber:number]);

其他提示

use this code for doing this task:-

    NSNumberFormatter *formatter1 = [[NSNumberFormatter alloc] init];
    [formatter1 setNumberStyle:NSNumberFormatterDecimalStyle];
    NSString * formattedAmount2 = [formatter1 stringFromNumber: @20090809.99];
    NSLog(@"%@",formattedAmount2);

It's OUTPUT is :-

20,090,809.99

without number formatter:

NSNumber *someNumber = @(1234567890);
NSString *modelNumberString = [NSString localizedStringWithFormat:@"%@", someNumber];
NSLog(@"Number with commas: %@", modelNumberString);

Your formatting code is correct. The problem is that your number is of type float. Type float has limited precision. Your number cannot be represented exactly by float. The float value closest to 20090809.99 is 20090810.00. That is what -floatValue returns so that is what gets printed.

If you change your variable to type double, and call -[NSString doubleValue] and -[NSNumber numberWithDouble:], then it will behave as you expect.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top