我正在尝试学习C,但目前仍处于停滞状态。我正在尝试获得与下面相同的输出,但是我不确定如何舍入代码中的最后几个小数点以在下面获得相同的输出。
1. ENTER AN INTEGER
2. 5
3. DIAMETER: 10.000000
4. CIRCUMFERENCE: 31.415900
5. AREA: 78.539750
int main()
{
float num1, diameter, circumference, area;
printf("ENTER AN INTEGER\n");
scanf("%f", &num1);
diameter = 2 * num1;
circumference = 2 * 3.14159 * num1;
area = 3.14159 * (num1 * num1);
printf("DIAMETER: %f\n", diameter);
printf("CIRCUMFERENCE: %.6f\n", circumference);
printf("AREA: %.6f\n", area);
return 0;
}
我的结果的输出。
1. ENTER AN INTEGER
2. 5
3. DIAMETER: 10.000000
4. CIRCUMFERENCE: 31.415899
5. AREA: 78.539749
答案 0 :(得分:2)
在典型的C实现中,在这种情况下,将float
更改为double
,将scanf("%f", &num1);
更改为scanf("%lf", &num1);
将提供足够的精度,以获得所需的输出。
通常,您应该在浮点运算中期望较小的舍入误差(随着大量运算的复杂序列,该误差可能会增大为较大的误差)。
答案 1 :(得分:0)
正如@Eric Postpischil所说,您的小数位数错误是由于使用浮点数(单精度-32位-)进行的运算具有较小的精度误差。双精度数字(双精度-64位-)将解决您的精度问题。
在这里,您可以了解三种十进制类型的信息:Decimal types
您追逐的有效示例代码为:
int main()
{
double num1, diameter, circumference, area;
printf("ENTER AN INTEGER\n");
scanf("%lf", &num1);
diameter = 2 * num1;
circumference = 2 * 3.14159 * num1;
area = 3.14159 * (num1 * num1);
printf("DIAMETER: %lf\n", diameter);
printf("CIRCUMFERENCE: %.6lf\n", circumference);
printf("AREA: %.6lf\n", area);
return 0;
}