| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1392 人关注过本帖, 1 人收藏
标题:[求助]double問題
只看楼主 加入收藏
sayya9999
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-11-5
结帖率:100%
收藏(1)
 问题点数:0 回复次数:18 
[求助]double問題
#include <stdio.h>
#include <stdlib.h>

main()
{
    double a = 3000000.456;
    double b = 123.000258369;
   
    printf("%.10lf\n", a + b);
   
    system("pause");
}

上面的結果是3000123.4562583687


請問如何能夠正確的顯示3000123.456258369呢?
因為我的觀念是說double有效位數大約為16~17位,但是a跟b運算的話都不滿17位阿
搜索更多相关主题的帖子: double 
2008-11-10 19:58
Tchong
Rank: 1
等 级:新手上路
帖 子:117
专家分:0
注 册:2008-10-17
收藏
得分:0 
使用long double 来定义吧
下面的是我编的;
#include <stdio.h>
#include <stdlib.h>

main()
{
 long double sum;
    long   double a = 3000000.456;
 long   double b = 123.000258369;
  (long double)sum=a+b;
    printf("%.09Lf\n", sum);
   
  
}

最主要的错误是你的那个("%.10lf\不太应该是10,而是要用09,因为取十位的话,会出现四舍五入的情况
2008-11-10 20:18
xujie3
Rank: 1
来 自:浙江
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-7-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    double a = 3000000.456;
    double b = 123.000258369;
    
    printf("%.10f\n", a + b);
    return 0;
   
}

这样就可以了
2008-11-10 20:19
Tchong
Rank: 1
等 级:新手上路
帖 子:117
专家分:0
注 册:2008-10-17
收藏
得分:0 
[bo][un]xujie3[/un] 在 2008-11-10 20:19 的发言:[/bo]

#include
#include

int main()
{
    double a = 3000000.456;
    double b = 123.000258369;
   
    printf("%.10f\n", a + b);
    return 0;
   
}

这样就可以了


这样是错误的啊,犯的是同一种错误
2008-11-10 20:30
xujie3
Rank: 1
来 自:浙江
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-7-22
收藏
得分:0 
回复 4# 的帖子
我在vc++6.0 codeblocks上都试过,可以啊。
2008-11-10 20:52
nhuzwj
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-11-5
收藏
得分:0 
Tchong的我算出来是-0.000000000,有long double这个类型么?没学过,不过好像编译也不会报错,而且用sizeof查了一下占10各字节,比double多2个,按理说如果存在这个类型的话精度应该满足要求,但为什么我输出的是-0.000000000,难道是编译器的问题?我是win-TC
xujie3的我算出来还是3000123.4562583687

double的精度是8个字节,也就是16位(可能小数点也占去1位,剩下15位),计算两个数和时我想应该不是只要两个数各自的精度满足要求了其结果也能满足要求,最后结果应该是首先保证整数部分精度,即3000123占去7位,剩下8位保证小数部分精度,这样也就能解释为是什么只能精确到3000123.45625836了

补充说明一下,输出时格式改成%.9lf的确显示3000123.456258369,虽然结果显示是正确的,但其实只不过是最后一位四舍五入了而已

[[it] 本帖最后由 nhuzwj 于 2008-11-10 21:02 编辑 [/it]]
2008-11-10 20:55
Tchong
Rank: 1
等 级:新手上路
帖 子:117
专家分:0
注 册:2008-10-17
收藏
得分:0 
vc++6.0 不行啊
那我就不知道了,我们两个都是对的吧
2008-11-10 20:55
xujie3
Rank: 1
来 自:浙江
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-7-22
收藏
得分:0 
我有点郁闷了,我没看清问题,以为你要的是小数后10位,那你改一下后面的输出格式就好了。
#include
#include

int main()
{
    double a = 3000000.456;
    double b = 123.000258369;
   
    printf("%.09f\n", a + b);
    return 0;
   
}
这种问题还是多看看书吧,基础当然很重要。
2008-11-10 21:01
xujie3
Rank: 1
来 自:浙江
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-7-22
收藏
得分:0 
前面的头文件没加,刚才直接复制了
#include <stdio.h>
#include <stdlib.h>

int main()
{
    double a = 3000000.456;
    double b = 123.000258369;
   
    printf("%.09f\n", a + b);
    return 0;
   
}
2008-11-10 21:02
nhuzwj
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-11-5
收藏
得分:0 
补充说明一下,输出时格式改成%.9lf的确显示3000123.456258369,虽然结果显示是正确的,但其实只不过是最后一位四舍五入了而已
2008-11-10 21:03
快速回复:[求助]double問題
数据加载中...
 
   



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

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