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

Как я могу округлить значение float до двух постсимвольных позиций?

У меня есть значение float с акселерометра, который выглядит так:

-3,04299553323

Я бы хотел получить -3,04, например. Есть ли простой способ округления этого значения float?

Изменить:

Число округлений в Objective-C

4b9b3361

Ответ 1

Я знаю, что это старый пост, но на случай, если кто-то ищет быстрый двухэтапный вариант.

float old = -3.04299553323;  
float new = [[NSString stringWithFormat:@"%.2f",old]floatValue];

Результат = -3.04

@ "%. 2f" будет округлить до двух знаков после запятой. Если вы хотите, чтобы три десятичных знака помещали @ "%. 3f" и так далее.

Надеюсь, это поможет!

Ответ 2

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

float rounded = roundf(orig * 100) / 100.0;

или аналогичный ответ вернет точный ответ.

В самом деле, в общем, этого не произойдет. Например, рассмотрим

float f = 123456.3;
float r = roundf(f * 100) / 100.0;

printf("%.2f, %.10f\n", r, r);

который выводит

123456.30, 123456.2968750000

К сожалению,

Использование double, а не float помогает, но даже при этом, если мы немного изменим код, вы можете увидеть, что он действительно не решает проблему:

double f = 123456.3;
double r = round(f * 100) / 100.0;

printf("%.2f, %.20f\n", r, r);

Опять получим

123456.30, 123456.30000000000291038305

который ясно показывает, что он не совсем округлен.

Во всяком случае, мораль этой истории заключается в том, что делать такие вещи, как round(f * 100) / 100.0 только раунды приблизительно. В некоторых случаях это может быть достаточно хорошим, но вам нужно иметь в виду, что результат на самом деле не округлен.

Если вам нужно что-то лучше, вам нужно будет использовать десятичную арифметику. Вы можете сделать это, сохранив ваши значения как целые числа (например, для значений валюты, удерживайте их в пенса или центах вместо фунтов или долларов), или используя один из различных десятичных пакетов с плавающей запятой, вы можете найти на странице Wikipedia Decimal Floating Point.

Ответ 3

Умножьте его на 100, (округлите вверх/вниз до ближайшего целого, если необходимо), возьмите целочисленную часть, затем снова разделите на 100

Применяется для любого числа десятичных знаков, умножьте/разделите на 10 ^ (число десятичных знаков).

Ответ 4

Я просто отправляю свой ответ на этот вопрос, потому что это был единственный способ заставить меня быстро работать, когда я объединил два из этих ответов, чтобы отобразить округленное значение float для пользователя в приложении iPad:

NSString *roundedAmount = [NSString stringWithFormat:@"%.2f", round ((floatValue / 1024) * 100.0) / 100.0];