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
Другие вопросы по тегам