C++, как установить фиксированную десятичную точность для числа с плавающей запятой
У меня есть вызов API, который возвращает двойной. Десятичная длина двойника может варьироваться от многих десятичных разрядов до нескольких (все сводится к состоянию привода). Этот двойной представляет текущую позицию на радиусе действия привода. Я не заинтересован в таком подробном номере, потому что он добавляет много шума в систему. Я использовал поплавки для экономии места, но все же у меня есть поплавки, длина которых составляет 6-8. Я не интересуюсь полом или потолком, просто потому что это не делает работу, которую я хочу. Например, у меня есть номера:
-2.05176
-0.104545
0.30643
0.140237
1.41205
-0.176715
0.559462
0.364928
Я хочу, чтобы точность была установлена на 2 десятичных знака, несмотря ни на что. Я не говорю о точности вывода на std::cout, я знаю, как это установить. Я говорю о реальной точности поплавка. То есть: меня интересуют поплавки, которые будут иметь формат 0.XX и фактическую точность 0.XX00000000000. Поэтому преобразуем приведенный выше список в:
-2.05
-0.10
0.30
0.14
1.41
-0.17
0.55
0.36
Я знаю, что в boost есть шаблон числового преобразования, но я не могу понять, как конвертировать из float в float с более низкой точностью. Может кто-нибудь помочь, пожалуйста?
2 ответа
Вы не можете просто обойти это.
float round(float num, int precision)
{
return floorf(num * pow(10.0f,precision) + .5f)/pow(10.0f,precision);
}
Точность float и double зависит от оборудования. Все остальное должно быть закодировано в программном обеспечении.
Вместо этого вы можете попробовать масштабирование, работая в целых:
-205
-10
30
14
141
-17
55
36