黑马程序员技术交流社区

标题: 很奇葩的答案,哪个大神能帮忙解解 [打印本页]

作者: 2014571245    时间: 2014-4-24 22:00
标题: 很奇葩的答案,哪个大神能帮忙解解
本帖最后由 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  不理解


作者: z82454642    时间: 2014-4-24 22:05
float单精度浮点型,6位小数,第7位以后随机,如果大于5第6位加1
作者: blz01003hm    时间: 2014-4-24 22:10
是不是精度的损失
#include <stdio.h>
int main()
{
             double a = 123.456;//改为 double a=123.456就没有1了
             printf("%f",a);
             return 0;
}
作者: 桑托尔    时间: 2014-4-25 08:00
这是由于float的存储范围,导致数据遗失的情况
虽然都是小数,但是float的精度要小于double。float占得内存为4,而double为8。
所以楼主如果希望建一个变量,来存储精度比较高的小数的话,建议还是用double为佳。
作者: gaoxinglei123    时间: 2014-4-25 08:22
嗯。应该是精度的丢失。 有个例子 就是比较浮点数的相等。其实是比较两个浮点数的差值小于某个 阀值,例如1e-6





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2