Правильное использование спецификатора формата для отображения до трех десятичных знаков при необходимости, в противном случае ноль десятичных знаков? - PullRequest
5 голосов
/ 01 сентября 2011

Я обнаружил, что% g показывает только десятичные числа, если это необходимо.Если число целое, не добавляется конечный .000, так что это хорошо.Но в случае, например, 1.12345 я хочу коротко ответить на 1.123.И в случае 1.000 я хочу показать только 1, как это делает% g.

Я пытался указать% .3g в строке, но это не работает.Если у кого-то есть ответ, я был бы признателен!

Ответы [ 3 ]

11 голосов
/ 02 сентября 2011

Я рассмотрел возможности «строки формата» в спецификации IEEE и, насколько я понимаю, ваше желаемое поведение невозможно.

Я рекомендую вам использовать NSNumberFormatterучебный класс.Я написал пример, который соответствует вашему желаемому поведению.Надеюсь, это поможет:

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setDecimalSeparator:@"."];
[numberFormatter setGroupingSeparator:@""];
NSString *example1 = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:123456.1234]];
NSLog(@"%@", example1);
NSString *example2 = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:123456.00]];
NSLog(@"%@", example2);
2 голосов
/ 01 сентября 2011

Что вы получаете за NSLog (@ "%. 3g", 1.12345)?

Я провел несколько тестов, и, как я понял ваш вопрос, вы на правильном пути. Вот мои результаты:

NSLog(@"%g", 1.000000);    => 1
NSLog(@"%g", 1.123456789);  => 1.12346
NSLog(@"%.1g", 1.123456789);  => 1
NSLog(@"%.2g", 1.123456789);  => 1.1
NSLog(@"%.3g", 1.123456789);  => 1.12
NSLog(@"%.4g", 1.123456789);  => 1.123

Чтобы получить то, что вы хотите, используйте @ "%. 4g".

0 голосов
/ 23 января 2018

Вот решение Яна для Swift 4:

let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 2
numberFormatter.decimalSeparator = "."
numberFormatter.groupingSeparator = ""
let example1 = numberFormatter.string(from: 123456.1234)!
print(example1)
let example2 = numberFormatter.string(from: 123456.00)!
print(example2)
...