У меня есть значение float с акселерометра, который выглядит так:
-3,04299553323
Я бы хотел получить -3,04, например. Есть ли простой способ округления этого значения float?
Изменить:
У меня есть значение float с акселерометра, который выглядит так:
-3,04299553323
Я бы хотел получить -3,04, например. Есть ли простой способ округления этого значения float?
Изменить:
Я знаю, что это старый пост, но на случай, если кто-то ищет быстрый двухэтапный вариант.
float old = -3.04299553323;
float new = [[NSString stringWithFormat:@"%.2f",old]floatValue];
Результат = -3.04
@ "%. 2f" будет округлить до двух знаков после запятой. Если вы хотите, чтобы три десятичных знака помещали @ "%. 3f" и так далее.
Надеюсь, это поможет!
Вы должны делать это только при форматировании номера для отображения конечному пользователю, потому что нет гарантии, что
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.
Умножьте его на 100, (округлите вверх/вниз до ближайшего целого, если необходимо), возьмите целочисленную часть, затем снова разделите на 100
Применяется для любого числа десятичных знаков, умножьте/разделите на 10 ^ (число десятичных знаков).
Я просто отправляю свой ответ на этот вопрос, потому что это был единственный способ заставить меня быстро работать, когда я объединил два из этих ответов, чтобы отобразить округленное значение float для пользователя в приложении iPad:
NSString *roundedAmount = [NSString stringWithFormat:@"%.2f", round ((floatValue / 1024) * 100.0) / 100.0];