主题:关于数据类型的一个问题
#include<stdio.h>
main(void)
{double i,double m;
scanf("%lf",&i);
if(i<=100000) m=0.1*i;
else if(100000<i&&i<=200000) m=100000*0.1+(i-100000)*0.075;
else if(200000<i&&i<=400000) m=100000*0.1+100000*0.075+(i-200000)*0.05;
else if(400000<i&&i<=600000) m=100000*0.1+100000*0.075+200000*0.05+(i-400000)*0.03;
else if(600000<i&&i<=1000000) m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;
else m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;
printf("m=%lf,i=%lf\n",m,i);
}
这个程序 输入100000的话 m能准确的输出10000. 输出的i仍是100000
#include<stdio.h>
main(void)
{long int i,double m;
scanf("%ld",&i);
if(i<=100000) m=0.1*i;
else if(100000<i&&i<=200000) m=100000*0.1+(i-100000)*0.075;
else if(200000<i&&i<=400000) m=100000*0.1+100000*0.075+(i-200000)*0.05;
else if(400000<i&&i<=600000) m=100000*0.1+100000*0.075+200000*0.05+(i-400000)*0.03;
else if(600000<i&&i<=1000000) m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;
else m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;
printf("m=%lf,i=%ld\n",m,i);
}
这个程序,输入100000,输出的m却为0.000000,i变成了2367460
为什么将i定义为长整型时就不正常,定义成双精度就正常了?求高手指点
main(void)
{double i,double m;
scanf("%lf",&i);
if(i<=100000) m=0.1*i;
else if(100000<i&&i<=200000) m=100000*0.1+(i-100000)*0.075;
else if(200000<i&&i<=400000) m=100000*0.1+100000*0.075+(i-200000)*0.05;
else if(400000<i&&i<=600000) m=100000*0.1+100000*0.075+200000*0.05+(i-400000)*0.03;
else if(600000<i&&i<=1000000) m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;
else m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;
printf("m=%lf,i=%lf\n",m,i);
}
这个程序 输入100000的话 m能准确的输出10000. 输出的i仍是100000
#include<stdio.h>
main(void)
{long int i,double m;
scanf("%ld",&i);
if(i<=100000) m=0.1*i;
else if(100000<i&&i<=200000) m=100000*0.1+(i-100000)*0.075;
else if(200000<i&&i<=400000) m=100000*0.1+100000*0.075+(i-200000)*0.05;
else if(400000<i&&i<=600000) m=100000*0.1+100000*0.075+200000*0.05+(i-400000)*0.03;
else if(600000<i&&i<=1000000) m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(i-600000)*0.015;
else m=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(i-1000000)*0.01;
printf("m=%lf,i=%ld\n",m,i);
}
这个程序,输入100000,输出的m却为0.000000,i变成了2367460
为什么将i定义为长整型时就不正常,定义成双精度就正常了?求高手指点