永发信息网

共用体里面的整数以浮点数形式输出为什么是0

答案:2  悬赏:20  手机版
解决时间 2021-02-23 12:48
比如说 整数是75 按理说以浮点数输出是75.00000
最佳答案
如果定义的数据是int,用浮点数输出会出错的,结构体内也不例外

比如,以下小程序运行看看:
#include <stdio.h>
void main()
{
int a;
printf("Please input a number: ");
scanf("%d",&a);
printf("a=%d\n",a);
printf("a=%f\n",a);
}
全部回答
调试了一下发现这个,8.85705,和9.85705的精度都会丢失,所以要想得到你要的数据建议使用%.5f 为何浮点数可能丢失精度浮点十进制值通常没有完全相同的二进制表示形式。 这是 cpu 所采用的浮点数据表示形式的副作用。 为此,可能会经历一些精度丢失,并且一些浮点运算可能会产生意外的结果。 导致此行为的原因是下面之一: 十进制数的二进制表示形式可能不精确。 使用的数字之间类型不匹配(例如,混合使用浮点型和双精度型)。 为解决此行为,大多数程序员或是确保值比需要的大或者小,或是获取并使用可以维护精度的二进制编码的十进制 (bcd) 库。 现在我们就详细剖析一下浮点型运算为什么会造成精度丢失? 1、小数的二进制表示问题 首先我们要搞清楚下面两个问题: (1) 十进制整数如何转化为二进制数 算法很简单。举个例子,11表示成二进制数: 11/2=5 余 1 5/2=2 余 1 2/2=1 余 0 1/2=0 余 1 0结束 11二进制表示为(从下往上):1011 这里提一点:只要遇到除以后的结果为0了就结束了,大家想一想,所有的整数除以2是不是一定能够最终得到0。换句话说,所有的整数转变为二进制数的算法会不会无限循环下去呢?绝对不会,整数永远可以用二进制精确表示 ,但小数就不一定了。 (2) 十进制小数如何转化为二进制数 算法是乘以2直到没有了小数为止。举个例子,0.9表示成二进制数 0.9*2=1.8 取整数部分 1 0.8(1.8的小数部分)*2=1.6 取整数部分 1 0.6*2=1.2 取整数部分 1 0.2*2=0.4 取整数部分 0 0.4*2=0.8 取整数部分 0 0.8*2=1.6 取整数部分 1 0.6*2=1.2 取整数部分 0 ......... 0.9二进制表示为(从上往下): 1100100100100...... 注意:上面的计算过程循环了,也就是说*2永远不可能消灭小数部分,这样算法将无限下去。很显然,小数的二进制表示有时是不可能精确的 。其实道理很简单,十进制系统中能不能准确表示出1/3呢?同样二进制系统也无法准确表示1/10。这也就解释了为什么浮点型减法出现了"减不尽"的精度丢失问题。 2、 float型在内存中的存储 众所周知、 java 的float型在内存中占4个字节。float的32个二进制位结构如下 float内存存储结构 4bytes 31 30 29----23 22----0 表示 实数符号位 指数符号位 指数位 有效数位 其中符号位1表示正,0表示负。有效位数位24位,其中一位是实数符号位。 将一个float型转化为内存存储格式的步骤为: (1)先将这个实数的绝对值化为二进制格式,注意实数的整数部分和小数部分的二进制方法在上面已经探讨过了。 (2)将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。 (3)从小数点右边第一位开始数出二十三位数字放入第22到第0位。 (4)如果实数是正的,则在第31位放入“0”,否则放入“1”。 (5)如果n 是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。 (6)如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。 举例说明: 11.9的内存存储格式 (1) 将11.9化为二进制后大约是" 1011. 不是滴~整数的编码和浮点数的编码是不一样的,你必须这样写: printf("%f", (float)75); 这样才能输出75.000000
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
井下工人为什么要围毛巾?
五行缺水女孩名字
补写出下列名句中的上句或下句。(任选其中6句
3.23除以3.4列竖式计算
不是说苏卡达容易得结石病么?
与华佗同一时代的另一位医学家是谁他有什么成
请问如果申请法医鉴定,当事人如果和解能撤销
(2012)某项目由A、B、C、D四个部分组成,当采
你好,我的手机上连续发了几条这类的短信,请
世界上叫陈浩南名子有多少
吧友,清朝和阿拉伯帝国的疆域哪个更
8岁儿童能否看呼吸内科?
我手机打游戏不顺畅该怎么办啊?
雪莱的情诗有哪些,给些有代表性的,只给题目
民诉案例题
推荐资讯
初中英语同步100是根据艾宾浩记忆遗忘曲线编
PS4换硬盘安全模式可以识别U盘但无法找到固件
天安门怎么画好看
醉翁亭记写出了欧阳修具有什么样的从政思想
铆接头的连接板厚度t=d,则铆钉切应力τ=__
【普通话翻译粤语】普通话翻译成广东话
白家烧烤涮地址有知道的么?有点事想过去
网上订票问题求助(火车票)
估一估68÷5
中国工商银行临沂北园支行行号是多少?
里姆斯基,柯萨科夫是俄国著名音乐家、音乐教
晚上睡觉可以贴双眼皮贴吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?