二进制浮点数转十进制浮点数

tqwboy 2008-03-28 04:20:17
我要将二进制的浮点数专程十进制的浮点数,如(0.11)2->(0.75)10,于是写下了下面这个程序,可是却无法得到正确结果,请各位高手帮我看看问题出在了哪里?我看得快吐血了……

float BAcount_float(float floating,int pow_num) //小数部分处理
{
int leach_int;
float leach_float1,leach_float2=0;

pow_num=-1;

while(floating!=0)
{
leach_int=floating*10; //取出小数中的一位
floating=floating*10-leach_int; //让排后的小数前进一位

leach_float1=pow(2,pow_num);

leach_float1=leach_float1*leach_int+leach_float2;

leach_float2=leach_float1;

pow_num--;
}

return(leach_float2);
}
...全文
551 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tqwboy 2008-04-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lonelygo 的回复:]
可以看一下林锐的《高质量c/c++编程》关于浮点数和零点比较
#define EPSINON 1e-6 //定义可以允许的最小误差
x不等于0.0应该这样表示
if ((x <= -EPSINON) ¦ ¦ (x >= EPSINON))
[/Quote]

非常感谢
tqwboy 2008-04-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 acrobatyuer 的回复:]
引用 2 楼 tqwboy 的回复:
果然如此,我用断点调试发现果然是0.99999999

那么该如何解决这个问题?或者哪位高手能给出一个行得通的算法?


为什么我用VC6.0插入断点调用的时候确是0.1000000呢????
[/Quote]

我用的是Visual Studio 2002,貌似是VC++7.0,得到的确实是0.9999999999999999
xbt746 2008-03-31
  • 打赏
  • 举报
回复
呵呵,浮点计算啊,我也在弄啊,烦人
lonelygo 2008-03-30
  • 打赏
  • 举报
回复
可以看一下林锐的《高质量c/c++编程》关于浮点数和零点比较
#define EPSINON 1e-6 //定义可以允许的最小误差
x不等于0.0应该这样表示
if ((x <= -EPSINON) || (x >= EPSINON))
lonelygo 2008-03-30
  • 打赏
  • 举报
回复
可以看一下林锐的《高质量c/c++编程》关于浮点数和零点比较
#define EPSINON 1e-6 //定义可以允许的最小误差
x不等于0.0应该这样表示
if ((x <= -EPSINON) && (x >= EPSINON))
acrobatyuer 2008-03-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tqwboy 的回复:]
果然如此,我用断点调试发现果然是0.99999999

那么该如何解决这个问题?或者哪位高手能给出一个行得通的算法?
[/Quote]

为什么我用VC6.0插入断点调用的时候确是0.1000000呢????
tqwboy 2008-03-29
  • 打赏
  • 举报
回复
果然如此,我用断点调试发现果然是0.99999999

那么该如何解决这个问题?或者哪位高手能给出一个行得通的算法?
csdn5211 2008-03-28
  • 打赏
  • 举报
回复
while(floating!=0)

这条件不对,浮点数的行为不是那么听话的,比如1.10 - 1 你认为是多少?浮点数结果运算会是0.9999999!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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