2009-09-30 65 views
1

显然这只是代码的一小部分。是否可以使用printf语句来舍入double对象?

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); 

这会自动舍入我输入的数字吗?还是有另一种方法来做到这一点?

编辑:

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()函数吗?不知怎的,这会起作用吗?

EDIT2:

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。 我如何获得小数的某些幂而不是整数?

+0

是'x'是一个int还是double? – 2009-09-30 20:45:58

+0

我已经尝试过了,它只在某些时候有效。有没有另外一种方法可以做到这一点?我对C相对比较陌生。 – Chandler 2009-09-30 20:46:18

+0

X是在这个 – Chandler 2009-09-30 20:46:54

回答

4

你真的不应该在浮点变量中存储“舍入”值。浮点不准确会毁了这个 - 你的5.10可能会变成5.099999999941892,因为实现可能无法准确存储5.10。

作为一种替代方案,读取整数,并将其乘以100并将其转换为int(将其舍入为零)。这将保持你的计算准确。

+0

那么什么是替代? – Chandler 2009-09-30 20:57:08

+0

增加了一个建议 – hrnt 2009-09-30 21:01:04

+0

我应该在那种情况下使用pow()函数吗? – Chandler 2009-09-30 21:11:01

0

这是没有意义的

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

你不能与DECMAL点后的数字为整数。如果x是平坦的,那么奇怪的事情就会发生。如果它是一个整数,为什么你在printf中的小数点后两位。

你究竟想要做什么?

编辑:

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来围绕它。

+0

我试图围绕一个小数点后三位数字。 可以说我输入5.092697436 我想要圆到5.10 – Chandler 2009-09-30 20:48:18

+0

好吧我试过这个,但是它一直在向我吐口水.05。 请输入一个小数部分带有三位或更多小数位的正数 5.698 您输入的数字是0.05 – Chandler 2009-09-30 21:03:25

+1

使用%lf扫描双数。 %f只适用于浮动。 – hrnt 2009-09-30 21:03:37

2

%.2f”将四舍五入为2位数。双精度不是一个整数,并且%d%f不可互换。

+0

那么,我的问题在哪里?我应该有%f而不是%d? – Chandler 2009-09-30 20:51:55

+0

@Chandler是的,如果你打印的变量是'double'类型,你应该使用“%f”。 – 2009-10-01 00:04:48

0

printf不会改变数字的值,只是它如何显示。另一种方法是

#include <math.h> 

// round double x to 2 decimal places 
x = 0.01 * floor(x * 100.0 + 0.5); 
1
{ 

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; 

} 

谢谢大家谁试图帮助!我终于明白了

相关问题