社区
C语言
帖子详情
不调用标准库函数,如何得到double类型数据各位的值?
freezingfire
2002-12-17 03:11:21
现有一个double类型变量dSrc,想得到其各位的值,例如,100,得到1,0,0。
如果是int类型,使用%,很简单。但是double类型不支持。
只能采用将dSrc除以10的商,取整,再乘以10,与原来的dSrc相减,得到个位这样的算法。
对于double的取整,可以采用库函数floor(),但是现在不允许使用库函数,请问在这种情况下该如何取整?
或者有别的更好的方法来得到double各位的值?
谢谢!
...全文
55
19
打赏
收藏
不调用标准库函数,如何得到double类型数据各位的值?
现有一个double类型变量dSrc,想得到其各位的值,例如,100,得到1,0,0。 如果是int类型,使用%,很简单。但是double类型不支持。 只能采用将dSrc除以10的商,取整,再乘以10,与原来的dSrc相减,得到个位这样的算法。 对于double的取整,可以采用库函数floor(),但是现在不允许使用库函数,请问在这种情况下该如何取整? 或者有别的更好的方法来得到double各位的值? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rtdb
2002-12-18
打赏
举报
回复
double的取整:
double f;
int nValue = int(f+0.5) ;
MadLee
2002-12-18
打赏
举报
回复
如果f不是太大的话,直接转换成int不就行了?
double f = 234.56;
int n = f;
然后就用你说的方法。
freezingfire
2002-12-18
打赏
举报
回复
对不起,可能我原来没有说清楚,是得到十进制各位的值,
例如十进制的123,得到1,2,3,不是得到二进制各位的值,对不起!
begincsdn(begincsdn)那么辛苦的写出了程序,虽然不是我想要的,还是非常感谢!
俞庆平
2002-12-18
打赏
举报
回复
因为double型不支持很多的位操作,
所以强制转型为char来处理,
这样就可以进行位操作了。
因为表示位串习惯的关系,以及在计算机中表示的关系,
循环设定的初始值从高位向低位走。
实际的 double 的字节序为:
[7][6][5][4][3][2][1][0]
在每个字节中的位序
[76543210]
在seed >> =1 时先取得的是每个字节的[0]位,再[1]。一直到[7]
而存放它们时,我从数组的低位向高位存放,所以用了pos来表示
所以在数组中我存放的位序列为[0...63]
[7][01234567][6][01234567].....[0][01234567]
输出时,用表示习惯:
[0][76543210][1][76543210][2]....[7][76543210]
这样就形成了,上面三种有点难以理解的循环,待优化。
mengzq
2002-12-18
打赏
举报
回复
用memcpy,把double copy到一个char的数组中,然后满满处理,呵
俞庆平
2002-12-18
打赏
举报
回复
#include <iostream.h>
struct BITS
{
unsigned bit:1;
};
int main(int argc,char * argv[])
{
long size = sizeof(double);
BITS * dbbits = new BITS[size * 8];
char * p;
int seed = 1;
double test;
cin >> test;
while(test > 0.001 || test < -0.001)
{//取零退出循环
p = (char *)&test;
for(int pos = 0,i = size -1; i >= 0;i--)
{
seed = p[i];
for(int j = 7; j >= 0 ; j--,pos++)
{
dbbits[pos].bit = (0x01&seed)?1:0;
seed>>=1;
}
}
for( int i = size * 8 - 1;i >= 0 ; i--)
{
if(i%8 == 7) cout <<" ";
cout << dbbits[i].bit;
}
cout << endl;
cin >> test;
}
}
freezingfire
2002-12-18
打赏
举报
回复
To:zhaohangcom(赵)
不能使用库函数。
To:xzhuang(胖头鱼)
移出来之后呢?谭浩强的书我正在查,可是还没找到:P
freezingfire
2002-12-18
打赏
举报
回复
多谢各位热心,虽然没有得到答案。
SwordMan2001
2002-12-18
打赏
举报
回复
用sprintf可能会得到很多多余的0,用C++的 strstream 好了:
double f;
ostrstream ostr;
ostr<<f;
//之后,用ostr.str() 可以得到字符串值,而ostr.pcount() 可以得到字符个数,再处理应该很容易。
earthharp
2002-12-18
打赏
举报
回复
sprintf
然后自己取出来。
ckacka
2002-12-18
打赏
举报
回复
我有一个比较简单的思路就是用字符串把这个float的变量存储起来,然后就可以很容易的得到每一位(十进制)的数值。
即使要转换成真正的float变量也不难实现:
对于任何一个位(十进制)上的数字,只有十种可能性(0~9),你通过一个swicth语句就可以想一个float的变量里面添加了,比如个位就直接添加,十分位就乘以0.1,其余类推。
xzhuang
2002-12-17
打赏
举报
回复
用位运算。
比如:移位把它移出来。不过应该有更好的方法。谭浩强的书上就有。
zhaohangcom
2002-12-17
打赏
举报
回复
这个在C++函数库中有将double 变成字符一位一位存入 数组中的函数
你要有全一点C++函数库的 书 查一下吧
johnny_jiang
2002-12-17
打赏
举报
回复
建议嵌套ASM语句!!
具体方法,我暂时没有,但是我相信这样会简单点。
freezingfire
2002-12-17
打赏
举报
回复
不明白,能详细解释一下吗?
virginsoldier
2002-12-17
打赏
举报
回复
数据结构就是这样了,就看你怎么处理了!哈哈!:)
freezingfire
2002-12-17
打赏
举报
回复
double是8个字节吧?
另外,考虑到Windows和Unix的字节顺序问题,这样好像不行吧?
litsnake1
2002-12-17
打赏
举报
回复
up
virginsoldier
2002-12-17
打赏
举报
回复
struct BYTE
{
unsigned h:1;
unsigned g:1;
unsigned f:1;
unsigned e:1;
unsigned d:1;
unsigned c:1;
unsigned b:1;
unsigned a:1;
};
union
{
double var;
struct BYTE byte[4];
}
c库
函数
整理使用ACM必备
函数
名: abs 功 能: 求整数的绝对
值
用 法: int abs(int i);...用 法: double fabs(double x); 头文件:#include
函数
名: sin 功 能: 正弦
函数
用 法: double sin(double x); 头文件:#include <math.h>
你必须知道的495个C语言问题
1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决...
ORTP库局域网图传和VLC实时预览-第3/11季视频课程-海思
本季课程通过移植ORTP库并
调用
ORTP库
函数
来实现H.264裸流
数据
的网络传输,并且在Windows中安装VLC播放器,并在VLC中通过配置文件的方式来解析ORTP发送的裸流实现视频实时预览。本季课程的核心是ORTP协议的讲解,ORTP...
C语言与MATLAB接口——编程与实
这些
数据
类型主要包括:双精度(double)以及非双精度(single、uint8、uint16、uint32、uint64、int8、int32、int64)的数
值
陈列(如:标量、矢量、矩阵及三维陈列)、字符串、structures陈列、cell陈列、sparse陈列等。...
免费下载c语言试题及答案,c语言试题及答案
1、以下正确的说法是( B )(A) 用户若需要
调用
标准库
函数
,
调用
前必须重新定义(B) 用户可以重新定义
标准库
函数
,若如此,该
函数
将失去原有含义(C) 系统根本不允许用户重新定义
标准库
函数
(D) 用户若需
调用
标准库
函数
,...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章