#include<stdio.h>
int main()
{
double fract=0;
int tmp;
//scanf("%lf",&fract);
fract=0.312;
printf("%lf",fract);
printf("\n\n");
while(fract>0){
fract*=(double)10;
printf("%d ",(int)fract);
fract-=(int)fract;
}
getch();
return 0;
}
此代码应输出: 312
但是somehing不对..我正在使用devcpp 4.9.9.2编译器......
答案 0 :(得分:12)
Kernighan&amp;普劳格在他们古老但经典的书"The Elements of Programming Style"中说:
他们还说:
两种说法都指出浮点运算不精确。
请注意,一些现代CPU(IBM PPC)内置了IEEE 754:2008十进制浮点运算。如果使用正确的类型,那么您的计算将是准确的。
答案 1 :(得分:6)
浮点运算令人困惑,并且无法保证直观行为。
这是一份很好的参考文件:What Every Computer Scientist Should Know About Floating-Point Arithmetic。这是一份很长的文件,因为这是一个复杂的问题。
总结:如果您依赖于完全值,请不要使用浮点值。
答案 2 :(得分:6)
所以你乘以1000乘以0.3119999999999999999895916591441391574335284531116485595703125并截断它并得到311?我不知道问题出在哪里。