Подтвердить что ты не робот

Форматирование float в Objective C

Мне нужно форматировать float (catchy title, he?) до 2 десятичных знаков, но только если эти десятичные знаки имеют значения, которые не равны нулю. Пример:

У меня есть NSTextField с именем "answer", после того, как я сделаю некоторую математику с несколькими поплавками, я хочу назначить свою переменную "answerFloat" в "ответ" NSTextField. Пока у меня есть:

[answer setStringValue:[NSString stringWithFormat:@"%.2f", answerFloat]];

Но это устанавливает что-то вроде 45-45.00. Я хочу, чтобы целые числа отображались без нулей и любые десятичные числа, которые должны отображаться с их соответствующими десятичными значениями.

Нужно ли мне запускать какой-то чек, прежде чем передавать его в stringWithFormat? Или NSString предлагает способ справиться с этим?

4b9b3361

Ответ 1

Вы пробовали спецификатор формата %g?

NSLog([NSString stringWithFormat:@"%g, %g", 45.0, 45.5]);

2010-01-12 19: 54: 38.651 foo [89884: 10b] 45, 45,5

Ответ 2

Проблема с% g заключается в том, что у нее нет способа указать приращение округления (по крайней мере, не то, что я могу найти).

Вы можете использовать NSNumberFormatter, как это, для достижения вашего результата с числом, которое имеет undefined число десятичных знаков.

double none = 5;
double one = 5.1;
double two = 5.01;
double lots = 5.918286558251858392107584219;

NSNumber *numberNone = [NSNumber numberWithDouble:none];
NSNumber *numberOne = [NSNumber numberWithDouble:one];
NSNumber *numberTwo = [NSNumber numberWithDouble:two];
NSNumber *numberLots = [NSNumber numberWithDouble:lots];

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.roundingIncrement = [NSNumber numberWithDouble:0.01];
formatter.numberStyle = NSNumberFormatterDecimalStyle;

NSLog(@"%@",[formatter stringFromNumber:numberNone]);
NSLog(@"%@",[formatter stringFromNumber:numberOne]);
NSLog(@"%@",[formatter stringFromNumber:numberTwo]);
NSLog(@"%@",[formatter stringFromNumber:numberLots]);

Вывод:

2012-02-15 16:21:17.469 AwakeFromNib[53043:f803] 5
2012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.1
2012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.01
2012-02-15 16:21:17.471 AwakeFromNib[53043:f803] 5.92

Ответ 3

Посмотрите NSNumberFormatter.