| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4252 人关注过本帖
标题:float and UINT转换问题
只看楼主 加入收藏
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
结帖率:95.56%
收藏
已结贴  问题点数:20 回复次数:32 
float and UINT转换问题
新手问题~怎么转回1072048784来?
程序代码:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
    unsigned int B=1072048784;//3F E6 2A 90
    printf("%u\n",B);

    float Result1=0;
    memcpy(&Result1, &B, sizeof(float));
    printf("%f\n",Result1);

    printf("//----------------------------\n");

    char A[]={"1.798174"};
    printf("%s\n",A);

    int Result2=0;
    memcpy(&Result2, &A, strlen(A));
    printf("%u\n",Result2);

    printf("//----------------------------\n");

    float C=(float)atof(A);
    printf("%d\n",C);//若注解这行则下一行出的数值又会变~这是为何?
    printf("%u\n",C);

    return 0;
}


1072048784
1.798174
//----------------------------
1.798174
959917617
//----------------------------
939524096
1073741824 or 939524096 //若注解上一行则出的数值会变
2013-04-09 22:14
Juson
Rank: 4
等 级:业余侠客
帖 子:70
专家分:235
注 册:2013-4-8
收藏
得分:20 
跟具体的编译器还有库函数有关吧。我用的gcc,结果显示的都一样
不注释
1072048784
1.798174
//----------------------------
1.798174
959917617
//----------------------------
536870912
536870912

注释
1072048784
1.798174
//----------------------------
1.798174
959917617
//----------------------------
536870912

想转回1072048784,在进行一次拷贝不就行了吗
memcpy(&B, &C, sizeof(float) );
2013-04-09 23:57
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
回复 2楼 Juson
不行耶~数值有差~而且差值不一定~
图片附件: 游客没有浏览图片的权限,请 登录注册

不要投我
2013-04-10 09:07
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
之前就是做到这一步后~总是差一点再转回16进制后~就和原本的不同了~

不要投我
2013-04-10 09:08
Juson
Rank: 4
等 级:业余侠客
帖 子:70
专家分:235
注 册:2013-4-8
收藏
得分:0 
回复 4楼 yz1025
你把 1072048784 转换成单精度浮点数然后输出,结果是1.798174
其实1.798174是个约数,因为转换格式 %f 默认保留6位小数,如果保留10位,也就是 %.10f,输出的就是1.7981739044,可见实际转换后的浮点数是小于1.798174。
后面你字符串1.798174先转换成浮点数之后,该浮点数是1.7981740236....,显然大于1.798174,当把它传换成无符号整型后不等于1072048784 是很正常的,浮点数是有精度的,最好不要拿它和整型数据比较
2013-04-10 13:17
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
那为何atof();后~他自动帮我少掉一个位数?
原本丢进去是"1.798174"~出来变成1.79817~
atof();的返回值是Double型~精度应该比float更高~
就算强制转型float~它还是有小数后6位的精度~
怎会缩短成5位?

不要投我
2013-04-10 14:26
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

不要投我
2013-04-10 14:31
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
仔细看改后错更多~所以这篇删了~

[ 本帖最后由 yz1025 于 2013-4-10 14:48 编辑 ]

不要投我
2013-04-10 14:39
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:491
专家分:919
注 册:2012-10-26
收藏
得分:0 
以下是引用yz1025在2013-4-10 14:31:51的发言:

因为取得b值后~还有后段的处理~所以这边错~后面就全错~

不要投我
2013-04-10 14:53
Juson
Rank: 4
等 级:业余侠客
帖 子:70
专家分:235
注 册:2013-4-8
收藏
得分:0 
回复 7楼 yz1025
我用的gcc,对于VC不太了解,它界面下面显示的b的值可能是取的有效精确位,而把最后一位丢了,你用 %f 把b输出来看看,应该不会像那里显示的只有5个小数位,因为%f默认输出6位小数。

2013-04-10 15:03
快速回复:float and UINT转换问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017679 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved