各位老师,请教一下关于转换十六进制浮点数的问题

hq240 2016-05-22 11:20:12
我现在有一个浮点数是
468EAF48
按道理转化为浮点数应该是18263.640625
我的计算过程是
然后设指数位d1,有效数据位d2
取指数位46800000,有效数据位EAF48
对应的10进制就是d1=1182793728,d2=962376
按道理说,浮点数d=(@d2+8388608)*power(2,@d1/8388608-127-23)
但是,我的计算结果=0,我想可能是计算步骤中有效位数的问题,但是究竟怎么设置才对呢?更见鬼了的是,我另一个数据库运行就是正确的,今天这个做起来就是不对的,折腾了半天了,还请教各位老师我应该如何查找问题

declare @d2 bigint,@d1 bigint
set @d2=962376
set @d1=1182793728
select a=(@d2+8388608)*power(2,@d1/8388608-127-23)

运行结果为0

...全文
113 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingtiy 2016-05-22
  • 打赏
  • 举报
回复
会不会和你的数据库数据库版本有关? 检查下数据库版本看下?
hq240 2016-05-22
  • 打赏
  • 举报
回复
b=(cast(@d2*1.0 as decimal(38,10))+8388608)*power(2,cast(@d1*1.0 as decimal(38,10))*1.0/8388608-127-23) 即使改成这样还是不行,计算结果是0.000000了,究竟是哪里的问题呢?
hq240 2016-05-22
  • 打赏
  • 举报
回复
引用 4 楼 kingtiy 的回复:
你说变整数的问题. sqlserver中,int,bigint等整数类型,默认计算是不会有小数的部分的.直接舍懂的,所以你计算的时候,不防先乘1.0转换为float类型
看了这个好像是按照最小精度来的,之前有些计算自己*1.0了 但是这个指数的今天不知道是怎么回事了,算来算去都是0
hq240 2016-05-22
  • 打赏
  • 举报
回复
引用 2 楼 kingtiy 的回复:
我在我的DB上面运行也是结果为:0 关于浮点数,你看下这个? http://www.cnblogs.com/mlog/archive/2010/12/16/2456368.html
我也是按照标准的32位浮点数进行计算的,由于值是正的,符号位不考虑,只考虑第1~8位和第9~31位,我觉得好像是我哪里设置有问题吧 我用excel 算的是对的,上一个数据库计算结果也没错,今天不知道是为什么,感觉sql 的计算精度好难把握啊
kingtiy 2016-05-22
  • 打赏
  • 举报
回复
你说变整数的问题. sqlserver中,int,bigint等整数类型,默认计算是不会有小数的部分的.直接舍懂的,所以你计算的时候,不防先乘1.0转换为float类型
hq240 2016-05-22
  • 打赏
  • 举报
回复
如果把power改成^的话,得出的结果是负的 a=(@d2+8388608)*2^(@d1/8388608-127-23) 得出的结果是-18701977 我应该怎么设置才能得出正确的结果呢?
kingtiy 2016-05-22
  • 打赏
  • 举报
回复
我在我的DB上面运行也是结果为:0 关于浮点数,你看下这个? http://www.cnblogs.com/mlog/archive/2010/12/16/2456368.html
hq240 2016-05-22
  • 打赏
  • 举报
回复
还有,就是经常算着算着,莫名其妙的原因,原来正常输出的小数位都变整数了,这种情况是什么问题呢?经常会导致结果也不正确了 初学sql server 2012,还请各位老师能指点一下
hq240 2016-05-22
  • 打赏
  • 举报
回复
奇怪的地方是我另一个数据库查询不用这么改也没问题,类似的情况也遇到过,第一次查询都好好的,再次运行就尾数不对了,莫名其妙的,估计是不是中途哪个地方一变,后面就跟着变了
hq240 2016-05-22
  • 打赏
  • 举报
回复
引用 8 楼 kingtiy 的回复:
会不会和你的数据库数据库版本有关? 检查下数据库版本看下?
谢谢回复,已经搞定了,分就给热心的你啦 刚发现上面的^再这里是xor,搞错了,power是求幂的正确方式,这里我把power(2,n)修改成power(cast(2 as float),n)就都正确了 按道理说浮点数也是按照标准格式存放的,为什么就没有直接转换的函数呢?还是我没找到呢?我百度了好几天了.. 刚才一直想回复发现只能连续回3条,好郁闷啊

34,592

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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