Обрезать лишние нули при форматировании float в NSString - PullRequest
1 голос
/ 15 декабря 2011

Я пытаюсь отформатировать float с следующим образом:

1.1500 будет отображаться как «$ 1,15»
1.1000 будет отображаться как «$ 1.10»
1.0000 будет отображаться как «$ 1,00»
1.4710 будет отображаться как «$ 1.471»
1.4711 будет отображаться как «$ 1.4711»

Я пытался с

NSString *answer = [NSString stringWithFormat:@"$ %.2f",myvalue];

Ответы [ 4 ]

7 голосов
/ 15 декабря 2011

Это именно то, для чего NSNumberFormatter с предназначены для:

float onefifteen = 1.1500;    // displayed as “$ 1.15”
float oneten = 1.1000;     // displayed as “$ 1.10”
float one = 1.0000;    // displayed as “$ 1.00”
float onefortyseventen = 1.4710;    // displayed as “$ 1.471”
float onefortyseveneleven = 1.4711;    // displayed as “$ 1.4711”

NSNumberFormatter * formatter =  [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setUsesSignificantDigits:YES];   
// The whole number counts as the first "significant digit"
[formatter setMinimumSignificantDigits:3]; 

NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:onefifteen]]);
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:oneten]]);
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:one]]);
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:onefortyseventen]]);
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:onefortyseveneleven]]);

2011-12-15 19: 36: 52,185 Значимые центы [49282: 903] $ 1,15
2011-12-15 19: 36: 52,190 значимых центов [49282: 903] 1,10
2011-12-15 19: 36: 52,190 значимых центов [49282: 903] 1,00
2011-12-15 19:36: 52,191 значимых центов [49282: 903] 1,471
2011-12-15 19: 36: 52,192 значительных центов [49282: 903] 1,4711

1 голос
/ 15 декабря 2011

попробуйте это:

   NSString *answer = [NSString stringWithFormat:@"%.02f", myvalue];
0 голосов
/ 15 декабря 2011

Я должен понять это. Вы можете сделать это согласно приведенной ниже реализации.

Пожалуйста, посмотрите демонстрационный код ниже ...

NSArray * numbers = [[NSArray alloc] initWithObjects:@"1.1500",@"1.1000",@"1.0000",@"1.4710",@"1.4711",nil];

for (int i=0; i<[numbers count]; i++) {
    NSArray * floatingPoint = [[numbers objectAtIndex:i] componentsSeparatedByString:@"."];
    NSString * lastObject = [[floatingPoint lastObject] stringByReplacingOccurrencesOfString:@"0" withString:@""];
    if ([lastObject length] < 2) {
        NSLog(@"%@",[NSString stringWithFormat:@"$ %.2f",[[numbers objectAtIndex:i] floatValue]]);
    } else {
        NSLog(@"%@",[NSString stringWithFormat:@"$ %g",[[numbers objectAtIndex:i] floatValue]]);
    }
}

Спасибо

MinuMaster

0 голосов
/ 15 декабря 2011

Считайте документы по спецификаторам формата.

...