我有一个小程序:
int main(int argc, const char * argv[])
{
float num1;
float num2;
num1 = 21.2;
num2 = 13.6;
double sum;
sum = num1 + num2;
printf("The sum of two numbers is %3.5f. \n", sum);
return 0;
}
当它打印到控制台时,这就是我得到的:
两个数字的总和为34.800003
为什么我在小数结尾处得到3?试图理解Printf
,但这对我来说很神秘......
答案 0 :(得分:0)
使用双精度进行添加:
sum = num1;
sum += num2;
或申请一些演员:
sum = (double) num1 + (double) num2;
答案 1 :(得分:0)
它与数字的精确度有关。如果您对详细信息感兴趣,建议您查看Wikipedia on this。它们存储的格式只能精确到一定的降级。
要获得更高的准确度,请使用double
类型:
int main(int argc, const char * argv[])
{
double num1;
double num2;
num1 = 21.2;
num2 = 13.6;
double sum;
sum = num1 + num2;
printf("The sum of two numbers is %3.5f. \n", sum);
return 0;
}
答案 2 :(得分:0)
c中的所有内容都是按位完成的,只需打印num1和num2的十六进制值。您缺少的是0.2和0.6无法精确定义,因为您无法获得c中的正确位。在c小数点是 用2的幂的负数计算。从十进制到二进制的转换低于2 ^ -1 * b1 + 2 ^ -2 * b2 + 2 ^ -3 * b3这是c如何计算c中的浮点数。