Сделать поплавок показывать только два десятичных знака

У меня значение 25.00 в float , но когда я печатаю его на экране, оно составляет 25.0000000 .
Как отобразить значение только с двумя знаками после запятой?

Дело не в том, как хранится число, а в том, как вы его показываете. Преобразуя его в строку, вы должны округлить до нужной точности, которая в вашем случае равна двум десятичным знакам.

Например:

 NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat]; 

%.02f сообщает форматируемому, что вы будете форматировать float ( %f ) и, который должен быть округлен до двух мест, и должен быть дополнен 0 с.

Например:

 %f = 25.000000 %.f = 25 %.02f = 25.00 

Вот несколько исправлений –

 //for 3145.559706 

Swift 3

 let num: CGFloat = 3145.559706 print(String(format: "%f", num)) = 3145.559706 print(String(format: "%.f", num)) = 3145 print(String(format: "%.1f", num)) = 3145.6 print(String(format: "%.2f", num)) = 3145.56 print(String(format: "%.02f", num)) = 3145.56 // which is equal to @"%.2f" print(String(format: "%.3f", num)) = 3145.560 print(String(format: "%.03f", num)) = 3145.560 // which is equal to @"%.3f" 

Obj-C ,

 @"%f" = 3145.559706 @"%.f" = 3146 @"%.1f" = 3145.6 @"%.2f" = 3145.56 @"%.02f" = 3145.56 // which is equal to @"%.2f" @"%.3f" = 3145.560 @"%.03f" = 3145.560 // which is equal to @"%.3f" 

и так далее…

Вы также можете попробовать использовать NSNumberFormatter:

 NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease]; nf.positiveFormat = @"0.##"; NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]]; 

Возможно, вам также понадобится установить отрицательный формат, но я думаю, что он достаточно умен, чтобы понять это.

В Swift Language, если вы хотите показать, вам нужно использовать его таким образом. Чтобы назначить двойное значение в UITextView, например:

 let result = 23.954893 resultTextView.text = NSString(format:"%.2f", result) 

Если вы хотите показать в LOG, как объектно-c, используя NSLog (), то в Swift Language вы можете сделать так:

 println(NSString(format:"%.2f", result)) 

Я сделал быстрое расширение, основанное на вышеуказанных ответах

 extension Float { func round(decimalPlace:Int)->Float{ let format = NSString(format: "%%.%if", decimalPlace) let string = NSString(format: format, self) return Float(atof(string.UTF8String)) } } 

Применение:

 let floatOne:Float = 3.1415926 let floatTwo:Float = 3.1425934 print(floatOne.round(2) == floatTwo.round(2)) // should be true 

IN object-c, если вы имеете дело с регулярными массивами char (вместо указателей на NSString), вы также можете использовать:

 printf("%.02f", your_float_var); 

OTOH, если вы хотите сохранить это значение в массиве символов, вы можете использовать:

 sprintf(your_char_ptr, "%.02f", your_float_var); 

Проблема со всеми ответами заключается в том, что умножение, а затем деление результатов на точность вопросов, потому что вы использовали деление. Я давно это извлек из программирования на PDP8. Способ решения этого:

 return roundf(number * 100) * .01; 

Таким образом, 15.6578 возвращает только 15.66, а не 15.6578999 или что-то непреднамеренное.

Какой уровень точности вы хотите, зависит от вас. Просто не делите продукт, умножьте его на десятичный эквивалент. Не требуется смешное преобразование строк.

в объекте -c вы хотите отобразить значение float в 2 десятичных числах, затем передать аргумент, указывающий, сколько десятичных точек u хотите отобразить, например, 0.02f будет печатать 25.00 0.002f будет печатать 25.000

Вот некоторые методы для динамического форматирования в соответствии с точностью:

 + (NSNumber *)numberFromString:(NSString *)string { if (string.length) { NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; f.numberStyle = NSNumberFormatterDecimalStyle; return [f numberFromString:string]; } else { return nil; } } + (NSString *)stringByFormattingString:(NSString *)string toPrecision:(NSInteger)precision { NSNumber *numberValue = [self numberFromString:string]; if (numberValue) { NSString *formatString = [NSString stringWithFormat:@"%%.%ldf", (long)precision]; return [NSString stringWithFormat:formatString, numberValue.floatValue]; } else { /* return original string */ return string; } } 

например

 [TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:4]; 

=> 2,3453

 [TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:0]; 

=> 2

 [TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:2]; 

=> 2,35 (округление)

Другой метод для Swift (без использования NSString):

 let percentage = 33.3333 let text = String.localizedStringWithFormat("%.02f %@", percentage, "%") 

PS это решение не работает с типом CGFloat, проверенным только с помощью Float & Double

Используйте NSNumberFormatter с maximumFractionDigits как maximumFractionDigits ниже:

 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; formatter.maximumFractionDigits = 2; NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:12.345]]); 

И вы получите 12.35

Если вам нужно также плавать значение:

 NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat]; float floatTwoDecimalDigits = atof([formattedNumber UTF8String]); 
  lblMeter.text=[NSString stringWithFormat:@"%.02f",[[dic objectForKey:@"distance"] floatValue]]; 
  • Как вы объедините число с плавающей запятой в Perl?
  • Java: зачем вам нужно указывать 'f' в streamовом литерале?
  • Странная проблема сравнения поплавков в объективе-C
  • Как разобрать строку на float или int в Python?
  • C ++ десятичные типы данных
  • Деление с плавающей запятой против умножения с плавающей запятой
  • Как преобразовать float в int с Java
  • Сохранять точность с двойным в Java
  • Проблемы с двойной суммой Java
  • Арифметика с плавающей точкой не дает точных результатов
  • Почему (360/24) / 60 = 0 ... в Java
  • Давайте будем гением компьютера.