【发布时间】:2013-04-14 17:57:04
【问题描述】:
我有一个小程序:
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,但这对我来说很神秘......
【问题讨论】:
-
阅读“每个计算机科学家都应该了解的浮点运算知识”:docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
-
@SecurityMatt 问题是
printf的精度被指定为五位数。 -
您确定该输出吗? ideone.com/VRj497
-
无法复制,我的
printf尊重精度。你用的是什么编译器? -
@SecurityMatt 对于
printf,l长度修饰符 id 忽略了浮点数,只有scanf系列才重要。可能是 OP 没有复制并且不小心输入了一个 0 太多。但我有点天真并假设最好。如果小数点后实际上只有五位数字(四个零),那么通常的浮点建议当然适用。