为什么编程语言浮点计算出现误差?直接赋值却不会

不会写代码的丝丽
博客专家认证
2017-01-08 11:53:44

public class TryUsingAnonymousClass {
public static void main(String[] args) {


float b = 0.9f;
//这是第7行
System.out.println(b);
//这是第9行
System.out.println(2.0-1.1);
}


}

我在网上看了很多资料说是浮点丢失精准度 我直接赋值给b = 0.9 然后再第7行输出为什么不丢失?
却在第9行计算的时候丢失?是不是直接赋值 0.1 0.2 .....这样的话不会丢失?
...全文
374 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 soton_dolphin 的回复:
精确度确实只是在计算过程中出现。 对精确度要求高的系统,推荐使用BIGDECIMAL
我还是不大明白 为什么只在计算过程,出现浮点误差不是因为 无法精准存储每个小数导致的吗?我直接赋值一个无法精准存储的 使用的时候输出还是精准的,就是在计算的时候出现
soton_dolphin 2017-01-09
  • 打赏
  • 举报
回复
精确度确实只是在计算过程中出现。 对精确度要求高的系统,推荐使用BIGDECIMAL
  • 打赏
  • 举报
回复
引用 6 楼 rui888 的回复:
参考这个呢。
= =我不理解版主 发这个链接 和这个问题关联
tony4geek 2017-01-09
  • 打赏
  • 举报
回复
斯卡洛特 2017-01-09
  • 打赏
  • 举报
回复
改成2.0f-1.1f就能你想得到的0.9了。
xiesisi3 2017-01-09
  • 打赏
  • 举报
回复
引用 3 楼 qfanmingyiq 的回复:
[quote=引用 2 楼 soton_dolphin 的回复:] 精确度确实只是在计算过程中出现。 对精确度要求高的系统,推荐使用BIGDECIMAL
我还是不大明白 为什么只在计算过程,出现浮点误差不是因为 无法精准存储每个小数导致的吗?我直接赋值一个无法精准存储的 使用的时候输出还是精准的,就是在计算的时候出现[/quote] 你要明白计算机不是人,计算机的计算方式和人不一样 人计算是2 - 1.1,首先是2.0 - 1.1 低位先减,0-1不够,向高位借,然后得到0.9然后加上高位相减的0得到最后结果 计算机虽然也是这么计算的,但是计算机里面小数也是用二进制表示的,二进制表示小数是会存在精度问题的,JAVA中的float占4个字节,只能表示7位有效数字,然后超出界的就丢失了,所以做计算的时候就会出现异常情况。 比如你定义一个float a = 0.123456789试试,看打印出来的结果是多少你就知道了
吴某-某 2017-01-08
  • 打赏
  • 举报
回复
精度缺失主要是指计算时得到的最后结果的精度问题

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧