回 帖 发 新 帖 刷新版面

主题:关于数据类型的一个问题

#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定义为长整型时就不正常,定义成双精度就正常了?求高手指点

回复列表 (共3个回复)

沙发

溢出了

板凳

定义成双精度就正常,这和你的程序类型有关。



















SIGNATURE:--------------------------------------------------
A man of words and not of deeds is like a garden full of weeds.
[url=http://www.orderfrees.com/nike-free-run-c-22.html]nike free run[/url],[url=http://www.orderfrees.com/nike-lunar-elite2-c-96.html]nike lunar elite 2[/url],[url=http://www.orderfrees.com/nike-free-tr-fit-c-105.html]nike free tr fit[/url]

3 楼

顶顶顶 顶一顶顶一顶,谢谢分享




















[url=http://www.sc115.com/vector]矢量素材[/url],[url=http://www.sc115.com/PPT]PPT模板[/url],[url=http://www.sc115.com]素材中国[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册