2013-03-02 2 views
1

Моя цель моей программы - отключить pi в заданной точке, как это продиктовано пользователем.Как автоматически избавиться от конечных нулей?

Я выяснил, как это сделать, но я не могу понять, как избавиться от конечных нулей.

#include <stdio.h> 
#include <math.h> 
int main() 
{ 

int i,length; 
double almost_pi,pi;  
printf("How long do you want your pi: "); 
scanf("%d", &length); 

pi = M_PI; 

i = pi * pow(10,length); 

almost_pi = i/pow(10,length); 






printf("lf\n",almost_pi); 

return 0; 
} 

Предположим, что пользовательские входы 3, он должен вернуть 3.141, но он возвращается 3.141000.

Просьба и спасибо!

+0

http://en.wikipedia.org/wiki/Printf_format_string#Format_placeholders –

+0

Настоящая [статья] [1] поможет вам начать работу в правильном направлении. [1]: http://stackoverflow.com/questions/7425030/how-can-i-limit-the-number-of-digits-displayed-by-printf-after-the-decimal- Точка – jarmod

+0

3.141 - это то же, что 3.141000. В этом отношении он также совпадает с 3.141000000000000000. Ваша проблема заключается в отображении значения, а не в том, что введено. –

ответ

3

Это то, что вы пытаетесь сделать?

#include <stdio.h> 
#include <math.h> 

int main() 
{ 
    int length = 4; 
    printf("How long do you want your pi: "); 
    if (1 == scanf("%d", &length)) 
     printf("%.*f\n", length, M_PI); 
    return 0; 
} 

Пример вывода # 1

How long do you want your pi: 4 
3.1416 

Пример вывода # 2

How long do you want your pi: 12 
3.141592653590 
+0

Я не могу поверить, что это было просто ... Спасибо! – dLiGHT

0

printf ("%. 3f \ n", почти_pi); исправит это.

+0

Он должен сделать это так, чтобы он был основан на пользовательском входе, а не статически всегда установлен на «3». – eazar001

1

Вам необходимо указать параметр форматирования, длину, как дополнительный аргумент PRINTF :

printf("%.*f\n, length, almost_pi); 

This reference указывает, что «.* означает, что« Точность не указана в строке формата, а как дополнительный аргумент целочисленного значения, предшествующий аргументу, который должен быть отформатирован ».

В качестве альтернативы вы можете использовать %f как для двухместных, так и для поплавков с printf, но вам все равно придется использовать %lf для удвоений с помощью scanf. См. here.

Смежные вопросы