| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1208 人关注过本帖
标题:关于double类型的疑问
只看楼主 加入收藏
duwn124
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2010-8-10
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:10 
关于double类型的疑问
main()
{
    double x=54321987000;
    printf("%f\n",x);
}
输出的结果是2782379448.000000,而不是54321987000。

若将函数改为
main()
{
    double x=54321987e3;
    printf("%f\n",x);
}
就可得到想要的数据,不知为什么,请高人指点,谢谢!
搜索更多相关主题的帖子: double 疑问 类型 
2010-08-10 22:14
binsun
Rank: 1
等 级:新手上路
帖 子:7
专家分:6
注 册:2010-8-4
收藏
得分:3 
不知道,帮顶!记得double可以定义很大的数字。

[ 本帖最后由 binsun 于 2010-8-10 22:34 编辑 ]
2010-08-10 22:33
a88952603
Rank: 2
等 级:论坛游民
帖 子:8
专家分:12
注 册:2010-7-30
收藏
得分:3 
你printf("%f\n",x); 错了。。。f的类型是float, lf的类型才double
2010-08-10 22:35
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:3 
以下是引用duwn124在2010-8-10 22:14:24的发言:

main()
{
    double x=54321987000;
    printf("%f\n",x);
}
输出的结果是2782379448.000000,而不是54321987000。

若将函数改为
main()
{
    double x=54321987e3;
    printf("%f\n",x);
}
就可得到想要的数据,不知为什么,请高人指点,谢谢!
好像你是在TC 环境下?
如果换到VC环境 就没问题了!!

原因解析:

Turbo C 是标准C的编译器 语句 double x=54321987000; 其中数字"54321987000"默认为长整型(有符号),存放到内存后由于长整型取值范围是[-2147483648,2147483647] 所以出现了长整型数据溢出情况,计算机经过对4294947296 取模后结果为2782379448,所以程序运行结果为2782379448.000000
纠正的办法可为以下几种:
    double x=54321987000.0;  /* 用小数形式表示常数 */
    double x=54321987e3;     /* 用指数形式表示常数 */

[ 本帖最后由 jack10141 于 2010-8-10 22:43 编辑 ]
收到的鲜花
  • duwn1242010-08-11 10:29 送鲜花  3朵   附言:我很赞同

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-10 22:38
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:3 
是的,超出了数据的表示范围

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-10 23:06
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:3 
数据溢出都不给个警告吗?这编译器确实不敢恭维……
2010-08-11 10:04
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
回复 6楼 pangding
呵呵,写代码有很多问题要自己去避免的!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-11 10:22
duwn124
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2010-8-10
收藏
得分:0 
四楼的应该是正解,多谢各位了!
2010-08-11 10:30
haoqing33
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2010-8-11
收藏
得分:3 
别急!!1这种问题慢慢就会避免了。
2010-08-11 10:57
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:0 
学习要慢慢来呢!呵呵,我都在学,你还不加把劲么??O(∩_∩)O~

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-11 11:00
快速回复:关于double类型的疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022210 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved