求小数的小数位数

dm0602 2012-11-19 07:49:13
double dec = 0.63;
dec *= 10;
for(i = 0;(int)dec != 0;i++)
{
dec -= (int)dec;
dec *= 10;
}

printf("%d",i);
...全文
137 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dm0602 2012-11-20
  • 打赏
  • 举报
回复
谢了,问题解决了
子善旬 2012-11-19
  • 打赏
  • 举报
回复
#5 正解 要换表达方式
zodiac1111 2012-11-19
  • 打赏
  • 举报
回复
前提是确定是这种单精度浮点型格式,其他的表示方式就另说了.
1234.5678:

在线分析 http://www.binaryconvert.com/
维基百科:https://zh.wikipedia.org/zh/IEEE_754
尾数换算成十进制, 0.XXX0000
再去指数,得到移动几位.去掉后面的0
这样就可以得到(十进制格式)小数的位数.
但是其实上面的1234.5678在计算机中只能表示成
1.2345677490234375E3
也就是
1234.5677490234375
所以
1234.5678==1234.5677490234375
自求多福吧
armsword 2012-11-19
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
 
int main()
{
    string s;
    unsigned int i=0;
    int num = 0;
    getline(cin,s);
    while(s[i]!='.' && i<s.size()){
        ++i;
    }
    if(i == s.size())
        num = 0;
    else{
        int j = s.size() - 1;
        num = s.size()-i-1;
        while(s[j--] == '0')
            num--;
    }
 
    cout<<num<<endl;
    return 0;
}
dm0602 2012-11-19
  • 打赏
  • 举报
回复
那怎么可以求出呢,求指教
sx666777888 2012-11-19
  • 打赏
  • 举报
回复
你第一次for的时候 (int)dec != 0 这时候dec就是int类型的了,此时dec=6了,循环里的计算也就没意义了,应该是吧
manxiSafe 2012-11-19
  • 打赏
  • 举报
回复
这样做是不行的,浮点数,既然有浮动,所以 不可能次次读出来的值 都是一样的。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧