| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8433 人关注过本帖
标题:关于double型小数点位数的问题
只看楼主 加入收藏
linan03
Rank: 4
等 级:业余侠客
威 望:5
帖 子:76
专家分:204
注 册:2012-10-27
结帖率:44.44%
收藏
已结贴  问题点数:20 回复次数:6 
关于double型小数点位数的问题
我用的是VC2010
简单的函数,求x的n次方。
#include<iostream>
using namespace std;
double power(double x,int n)
{
    int i;
    double h;
    h=x;
    for(i=2;i<=n;i++)
    {
        x*=h;
    }
    if(n==0)
        x=1;
    return x;
}

void main()
{
    int n;
    double x,length;
    cout<<"请输入x:";
    cin>>x;
    cout<<"请输入n:";
    cin>>n;

    length=power(x,n);
    cout<<length<<endl;
}

运行时
x=3.1415926
n=2
得出的结果是9.8696

都是double型的,为什么相乘后小数点后位数反而少了?
求解释
搜索更多相关主题的帖子: include double return 
2012-11-21 00:21
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
1。计算机用的是浮点数,不是定点数
2。显示多少位由setprecision设置
2012-11-21 09:24
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
收藏
得分:1 
楼主可以通过setprecision(n)来指定小数的显示位数,需要#include <iomanip>

    cout<<setprecision(8)<<length<<endl;

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-11-21 09:34
linan03
Rank: 4
等 级:业余侠客
威 望:5
帖 子:76
专家分:204
注 册:2012-10-27
收藏
得分:0 
回复 2楼 rjsp
额,在我的认知中double型的是可以保存小数点后至少7位的吧,我相乘的两个数都是double型肯定保证这两个数小数点后7位都有保存在内存中吧,得出的结果也是存放在double型里,可是得出的结果小数点后的位数反而变少了。
这和你说的计算机使用的是浮点数不是定点数有什么关系? 能不能具体解释一下。
2012-11-24 03:11
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:1 
格式化输出
例如:
printf("%.10lf",浮点数);
这是c代码  c++中肯定也有类似的代码

DO IT YOURSELF !
2012-11-24 08:03
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:18 
以下是引用linan03在2012-11-24 03:11:48的发言:

额,在我的认知中double型的是可以保存小数点后至少7位的吧,我相乘的两个数都是double型肯定保证这两个数小数点后7位都有保存在内存中吧,得出的结果也是存放在double型里,可是得出的结果小数点后的位数反而变少了。
这和你说的计算机使用的是浮点数不是定点数有什么关系? 能不能具体解释一下。
在我的认知中double型的是可以保存小数点后至少7位的吧
------ 错,double的有效位有53bits,即十进制的15到16位有效数字。和小数点后几位毫无一丝关系,你知道科学计数法吗,有点类似。
如果你一定要刨根问底,当你输入3.1415926后,x的值为 3.14159260000000006840537025709636509418487548828125
length=x*x 的值为 9.8696040643747604548252638778649270534515380859375
当用cout输出这个9.8696040643747604548252638778649270534515380859375时,截取前6位有效数字而显示9.8696,相当于C中的printf( "%6g", length )。这是默认设置,你可以用setprecision设置输出任意长度。

可是得出的结果小数点后的位数反而变少了。
------ 如果你问别人pi等于多少,有的人说3.14,有的人说3.14159265,虽然值不一样,但说的都是同一个确定的pi

2012-11-24 08:31
linan03
Rank: 4
等 级:业余侠客
威 望:5
帖 子:76
专家分:204
注 册:2012-10-27
收藏
得分:0 
回复 6楼 rjsp
  版主牛逼... 俺明白了..  非常感谢!!   
2012-11-24 19:22
快速回复:关于double型小数点位数的问题
数据加载中...
 
   



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

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