关于小数取整问题#include main(double x,int d){double sum2,sum3,temp;int s1;double s2,n1=1.0;double n2=2.0;int sum1;x=111.1;d=1;temp=x;sum1=int (x);sum2=temp-(double)sum1;sum3=0.0;cout

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/24 07:26:55
关于小数取整问题#include main(double x,int d){double sum2,sum3,temp;int s1;double s2,n1=1.0;double n2=2.0;int sum1;x=111.1;d=1;temp=x;sum1=int (x);sum2=temp-(double)sum1;sum3=0.0;cout

关于小数取整问题#include main(double x,int d){double sum2,sum3,temp;int s1;double s2,n1=1.0;double n2=2.0;int sum1;x=111.1;d=1;temp=x;sum1=int (x);sum2=temp-(double)sum1;sum3=0.0;cout
关于小数取整问题
#include
main(double x,int d)
{double sum2,sum3,temp;
int s1;
double s2,n1=1.0;
double n2=2.0;int sum1;
x=111.1;
d=1;
temp=x;
sum1=int (x);
sum2=temp-(double)sum1;
sum3=0.0;cout

关于小数取整问题#include main(double x,int d){double sum2,sum3,temp;int s1;double s2,n1=1.0;double n2=2.0;int sum1;x=111.1;d=1;temp=x;sum1=int (x);sum2=temp-(double)sum1;sum3=0.0;cout
111
sum2 1 0.1
sum21
s2 0
看清楚了,是0.99999999999994316
不是1,精度问题,计算机认为0.99999999999994316与1是没有差别的.
所以显示的时候显示了1
之所以会这样是因为计算机对数学计算中长的数是会截断的.
如数学上是
1/3 = 0.333333333333.
3*0.333333333333...= 0.99999999999.= 1
而计算机里面计算是
1/3 =0.333333333333
3*0.333333333333 = 0.99999999999 != 1 //截断了
但显示程序设计上会认为0.99999999999是等于1的,因为这样友善些.
那怎么才能解决这个问题呢,这个小程序是一个二进制的数转化为十进制的数
while(sum2 > 0.00000002){ // 之前这里写错了,现在应该行了
sum2 += 0.00000001; //这里加一行就可以解决了.
sum2=sum2*10.0;
cout