Можно ли округлить двойное число, используя только оператор printf? - PullRequest
1 голос
/ 01 октября 2009

Очевидно, что это только часть кода.

printf("Please enter a positive number that has a fractional part with three or more decimal places\n");
scanf("%5.2d", &x);
printf("The number you have entered is %5.2d\n" ,x);

Будет ли это автоматически округлять число, которое я набираю? Или есть другой способ сделать это?

Edit:

printf("Please enter a positive number that has a fractional part with three or more decimal places\n");
scanf("%lf", &x);
x = x + 0.05;
printf( "The number you have entered is %5.2lf\n", x);

Я сделал это, но я принимаю во внимание то, что кто-то сказал о printf, просто "изменив" способ чтения. Так что это явно не правильный путь. Должен ли я реализовать, возможно, функцию pow ()? Будет ли это работать с этим как-то?

Редактировать2:

printf("Please enter a positive number that has a fractional part with three or more decimal places\n");
scanf("%lf", &x);
x = x + 0.05;
printf( "The number you have entered is %5.2lf\n", x);

Хорошо, я дошел до того момента, когда, если я ввожу число, оно округляется до целого числа. 35,21 округляется до 35, а 35,51 округляется до 36 и т.д. и т.д.

Как мне получить 35,2178 до 35,22 и 35,2135 до 35,21. Как бы я получил определенные десятичные числа округлять вместо целого числа?

Ответы [ 5 ]

4 голосов
/ 01 октября 2009

Вы действительно не должны хранить «округленные» значения в переменных с плавающей запятой. Неточность с плавающей запятой разрушит это - ваш 5.10 может стать 5.099999999941892 просто потому, что реализация не сможет точно хранить 5.10.

В качестве альтернативы, прочитайте целое число, умножьте его на 100 и преобразуйте в целое число (которое округлит его до нуля). Это будет держать ваши расчеты точными.

3 голосов
/ 01 октября 2009

"%.2f" округляет двойные до 2 цифр. Двойное число не является целым числом, и %d и %f не являются взаимозаменяемыми.

1 голос
/ 01 октября 2009
{

float x;
float rounded_x;

printf("Please enter a positive number that has a fractional part with three or more decimal places\n");
scanf("%f", &x);
rounded_x = ((int)(x * 100 + .5) / 100.0);

printf( "The number you have entered is %.2f\n", rounded_x);
return 0;

}

Спасибо всем, кто пытался помочь! Я наконец получил это

0 голосов
/ 01 октября 2009

printf не изменит значение числа, только то, как оно отображается. Альтернатива

#include <math.h>

// round  double x  to 2 decimal places
x = 0.01 * floor(x * 100.0 + 0.5);
0 голосов
/ 01 октября 2009

Это не имеет смысла

scanf("%5.2d", &x);

Вы не можете иметь целое число с числами после запятой. если х - квартира, то произойдут странные вещи. Если это целое число, почему вы после 2 десятичных знаков в printf.

Что именно вы пытаетесь сделать?

Edit:

double x;
printf( "Please enter a positive number that has a fractional part with three or more decimal places\n" );
scanf( "%lf", &x );
printf( "The number you have entered is %5.2f\n", x + 0.005 );

Я уверен, что printf только усекает. Так что вам нужно будет добавить 0,005, чтобы округлить его.

...