A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2014571245 中级黑马   /  2014-4-24 22:00  /  1064 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 2014571245 于 2014-4-27 10:51 编辑
  1. #include <stdio.h>
  2. int main()
  3. {
  4.              float a = 123.456;
  5.              printf("%f",a);
  6.              return 0;
  7. }
复制代码


  为什么结果是123.456001  不理解

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

4 个回复

倒序浏览
float单精度浮点型,6位小数,第7位以后随机,如果大于5第6位加1

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
是不是精度的损失
#include <stdio.h>
int main()
{
             double a = 123.456;//改为 double a=123.456就没有1了
             printf("%f",a);
             return 0;
}
回复 使用道具 举报
这是由于float的存储范围,导致数据遗失的情况
虽然都是小数,但是float的精度要小于double。float占得内存为4,而double为8。
所以楼主如果希望建一个变量,来存储精度比较高的小数的话,建议还是用double为佳。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
嗯。应该是精度的丢失。 有个例子 就是比较浮点数的相等。其实是比较两个浮点数的差值小于某个 阀值,例如1e-6
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马