• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

float 型运算

花生大事 2018-07-03 浏览量:743

float ab;

u16 ij;

i=15;

j=6;

a=i*0.1;

b=j*0.1;

结果为什么b=0.600000024

而不是0.6​

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 浮点数因为计数和计算过程中(二进制数计算)难免引入一些误差,这个没有办法避免,所以不要直接用两个浮点数做相等比较,而是相差绝对值在一个范围内就好。
    • 发布于 2018-07-03
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:5
  • 用二进制浮点数来表示十进制小数,大部分情况下是会有误差的。例如十进制的0.1换算成二进制就是个无限循环浮点数,尾数无限、但是实际存储时又只能存那么几位,自然就有误差。所以这个浮点数的误差是浮点数在存储为二进制时造成的,不可避免。
    • 发布于2018-07-03
    • 举报
    • 评论 0
    • 1
    • 0

  • 在单片机上,浮点的计算本质上还是int型的计算,这样的计算就会有一个误差的,由于进行了数据转换嘛。
    • 发布于2018-07-03
    • 举报
    • 评论 0
    • 1
    • 0

  • 这个是由于单片机不带FPU所以本质上还是整数运算,只是进行数据的转换,当然会丢失精度
    • 发布于2018-07-04
    • 举报
    • 评论 0
    • 1
    • 0

  • 主要是你的单片机没有FPU,不能进行浮点数运算,只要通过整形去变换,这样是会丢失一部分精度的
    • 发布于2018-07-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 楼主试试用printf("%f",b);看看结果?结果肯定是0.600000没错,不可能后面有24的后缀的,​楼主应该在别的什么地方也使用过这个b变量。

    • 发布于2018-07-28
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

float 型运算