网站首页 > java教程 正文
BigDecimal:4.0-3.3 不等于 0.7,坑麻了!
4.0 减去 3.3 竟然不等于 0.7,这个 BigDecimal 也太离谱了!
先来看一段代码,直接通过浮点数 new 出来两个 BigDecimal,然后用大的减去小的去跟 0.7 进行比较,看它是不是等于 0.7,也就是说 4.0 减去 3.3 是不是等于 0.7。
大家觉得这个结果是什么?应该是 true,然而事实并不是这样。
我先打个断点,然后到这里来运行一下,直接给它运行完,看它输出的结果是什么?它输出的是 false,也就是说这个是 false,4.0 减去 3.3 不等于 0.7,真是绝了!
那么这个 c 到底是什么?它为什么不等于 0.7?看 c 打出来之后,这个玩意是 0.7,但是后边有一些小数,它并不是一个整的 0.7。然后这个 d 也是这个样子的,我这边是直接通过 0.7 进行构造的,但是它构造出来的时候竟然是这个玩意儿 0.699,这也太绝了!
这应该怎么解决?实际上这个 idea 已经给我们提示出来了,你看是这个样子的,就是不要通过直接 new 浮点数去构建出 BigDecimal 来,应该通过字符串去构建,因为通过浮点数给构建的时候就会损失精度。
看来写代码的时候要好好注意一下 idea 的提示,现在就把它给改一改,这个样子,都把它改成为它提示的那一种,就是用字符串。这个时候大家觉得这个能不能是 true 了?这个能是精确的 0.7 吗?这个能是精确的 0.7 吗?现在直接来运行一下,就不打断点了,现在就是对的了,完全的相等,然后把它们打印出来,也是一个整的 0.7。
这就是 BigDecimal 的一个重要的注意事项。其实 BigDecimal 还有很多重要的注意事项,比如说在进行除法运算的时候,要指定它的小数位数,不然如果有无限小数就会直接报错。这个 BigDecimal 确实是个很好用的东西,但是实际使用的时候一定要注意,不然就要翻车了。
咱们下期视频再见拜拜。
猜你喜欢
- 2024-10-11 Java的“异常”(JAVA的异常体系)
- 2024-10-11 第四讲《JAVA基础之运算符》,小妙招教你速记、速填坑
- 2024-10-11 容易让人忽视的,java高精度运算(java高精度转低精度的原则)
- 2024-10-11 提高千倍效率的 Java 代码小技巧(java提高班)
- 2024-10-11 一文搞明白java中的位运算、补码、反码、原码
- 2024-10-11 十五、Java运算符-赋值运算符与instanceof运算符
- 2024-10-11 一文掌握Java二、八、十六进制运算实现原理
- 2024-10-11 计算机进制转换(计算机进制转换教程)
- 2024-10-11 Java基础之try catch finally的原理
- 2024-10-11 LeetCode算法第29题:两数相除(计算两数相除并输出结果)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)