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

Предположим, что a = 3,91900007534.
В языке C я хочу сохранить значение переменной 'a' в другой переменной 'r' с точностью до двух десятичных знаков, так что r = 3,92.
Обратите внимание, что я не хочу печатать значение с точностью до двух десятичных знаков, просто хочу сохранить значение, так как мне нужно точное значение 'r' для следующей операции.

2 ответа

Самый быстрый способ, который я могу придумать, - это использовать следующий метод, то есть умножение на 100, округление, а затем снова деление на 100:

      int main() 
{ 
   float number = 1.2345672; 
  
   // Setting precision to 2 digits
   number = round(number*100)/100; 
  
   printf("%g", number); 
   return 0; 
} 

Конечно, если вам нужно 3 десятичных знака, это будет 1000 , а не 100.

Итак, мы можем создать очень хорошую общую функцию, например:

      double precisionSetter(double num, double precision) 
{ 
    return round(pow(10,precision)*num)/pow(10,precision); 
}

Таким образом, вы можете легко выбрать, сколько десятичных знаков вы хотите:

      double a = 1.234567
a = precisionSetter(a,2)

Вышеупомянутое округлит поплавок. Если вас интересует усечение указанного числа с плавающей запятой, используйте floor() функция, а не round() один.

Просто умножьте на 100, усеките число с помощью floorи разделим на 100:

      double convert( double in ){
   return floor(in*100)/100.0;
}

Более общий подход:

      #include <math.h>

double convert( double in, int decimals ){
   double aux = pow(10,decimals);
   return floor(in*aux)/aux;
}

Как сказал @Some программист, приведенный выше код обрезается. Если вы хотите округлить, просто замените floor() к round():

      double convert( double in ){
   return round(in*100)/100.0;
}

Вот код работает: https://onlinegdb.com/By-a1Urf _

Другие вопросы по тегам