CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

关于二进制小数取位数的问题

楼主Fragile()2004-05-02 13:27:16 在 C/C++ / C++ 语言 提问

一个十进制数,它在计算机内是二进制的  
  比如10.65625=1010.10101  
  那如果我现在定义一个n,如果一个浮点数的二进制小数位数大于n,  
  我只取它二进制小数部分的前n位。  
  应该用什么算法 问题点数:0、回复次数:3Top

1 楼Fragile()回复于 2004-05-02 15:03:54 得分 0

往上顶一下,希望有人能回答一下。Top

2 楼rorot(rorot)回复于 2004-05-02 17:31:05 得分 0

#include   <iostream>  
  #include   <math.h>  
  #include   <string>  
  using   namespace   std;  
   
  class   Double  
  {  
  public:  
  //   构造函数  
  Double():   n_(0),   value_(0.00)   {}    
  Double(   int   nCount,   double   value   ):   n_(nCount),   value_(   SetValue(value)   )   {   }  
  double   GetValue()   {   return   value_;   }  
  //   转化成小数点后n位得十进制高精度数  
  double   Format(   int   nCount,   double   value   );  
  //   转化成小数点后nCount位得二进制字符串  
  const   char*   Format_to_bin(   int   nCount,   double   value   );  
   
  protected:  
  const   char* Decimal_to_bin(   const   double   value   );  
  double SetValue(   double   value   );  
  int n_;  
  double value_;  
  char buffer[1024];  
  };  
   
  //   设置精度  
  double Double::SetValue(   double     value   )  
  {  
  int   N   =   pow(   10,   n_   );  
  value_   =   (double(int(value   *   N)))   /   N;  
  return   value_;  
  }  
   
  //   格式化  
  double   Double::Format(   int   nCount,   double   value   )    
  {  
  n_   =   nCount;  
  SetValue(   value   );  
  return   value_;  
  }  
   
  const   char*   Double::Format_to_bin(   int   nCount,   double   value   )  
  {  
  n_   =   nCount;  
  value_   =   value;  
  return   Decimal_to_bin(   value_   );  
  }  
   
  //   浮点数转化为二进制字符串  
  const   char*   Double::Decimal_to_bin(   const   double   value   )  
  {  
  double   value_;  
  char   *ptr   =   NULL;  
   
  //   换算浮点数得整数部分  
  _itoa(   int(value),   buffer,   2   );  
  int   decLen   =     strlen(   buffer   );  
   
  //   添加小数点  
  buffer[decLen]   =   '.';  
  ptr   =   buffer   +   decLen   +   1;  
   
  //   转化小数部分  
  value_   =   value   -   int(value);  
  if   (   value_   ==   0.00   )  
  {  
  *ptr   =   '\0';  
  return   buffer;  
  }  
   
  //   控制小数点后得位数  
  int   nCount   =   n_;  
  //   value_   *=   2   取整数部分作为二进制  
  while   (   (value_   *=   2)   !=   2.0     &&   nCount   >   0   )  
  {  
  *ptr++   =   (   value_   >=   1.0   ?   '1'   :   '0'   );  
  value_   =   (   value_   >   1   ?   --value_   :   value_   );  
  nCount--;  
  }  
  *ptr   =   '\0';  
   
  return   buffer;  
  }  
   
  int   main()  
  //   测试高精度转化类  
  {  
  Double   obj(   2,   44.232452   );  
  cout   <<   obj.GetValue()   <<   endl;  
   
  //   转化成小数点后3位数字得高精度数  
  cout   <<   obj.Format(   3,   0.23425   )   <<   endl;  
  //   转化成小数点后2位数字得二进制字符串  
  cout   <<   obj.Format_to_bin(   2,   10.65625   )   <<   endl;  
   
  //   同上  
  cout   <<   obj.Format(   2,   10.65625   )   <<   endl;  
  cout   <<   obj.Format_to_bin(   3,   10.65625   )   <<   endl;  
   
  return   0;  
  }Top

3 楼rorot(rorot)回复于 2004-05-02 17:36:48 得分 0

我说下高精度数转化为二进制字符串得思路。  
  把double   value_分成整数部分和小数部分分别转化  
  1   整数部分得转化依靠库函数_itoa(   int(value),   buffer,   2   );把结果放进字符串缓冲区  
  2   添加小数点  
  3   小数部分得转化自己写:给小数部分不断乘2,每次取结果得整数部分;如果结果==1.0则结束  
  ------------------------------------  
  Top

相关问题

  • 怎样判断一个十进制的数(可能是小数)转化成二进制后的位数
  • 小数点后的二进制转十进制求助
  • 十进制小数转换为二进制
  • 对二进制文件的读取
  • 怎样读取二进制文件?
  • 如何存取二进制对象
  • 怎样存取二进制图片
  • 二进制文件的读取问题
  • 文件二进制读取问题
  • c#读取二进制文件?

关键词

  • 二进制
  • 转化
  • 小数
  • ncount
  • double
  • setvalue
  • decim
  • format
  • bin
  • const char

得分解答快速导航

  • 帖主:Fragile

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo