File tree Expand file tree Collapse file tree 1 file changed +4
-4
lines changed
Expand file tree Collapse file tree 1 file changed +4
-4
lines changed Original file line number Diff line number Diff line change @@ -21,7 +21,7 @@ System.out.println(a == b);// false
2121
2222** 为什么浮点数 ` float ` 或 ` double ` 运算的时候会有精度丢失的风险呢?**
2323
24- 这个和计算机保存浮点数的机制有很大关系 。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么浮点数没有办法用二进制精确表示 。
24+ 这个和计算机保存小数的机制有很大关系 。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么十进制小数没有办法用二进制精确表示 。
2525
2626就比如说十进制下的 0.2 就没办法精确转换成二进制小数:
2727
@@ -40,17 +40,17 @@ System.out.println(a == b);// false
4040
4141## BigDecimal 介绍
4242
43- ` BigDecimal ` 可以实现对浮点数的运算 ,不会造成精度丢失。
43+ ` BigDecimal ` 可以实现对小数的运算 ,不会造成精度丢失。
4444
45- 通常情况下,大部分需要浮点数精确运算结果的业务场景 (比如涉及到钱的场景)都是通过 ` BigDecimal ` 来做的。
45+ 通常情况下,大部分需要小数精确运算结果的业务场景 (比如涉及到钱的场景)都是通过 ` BigDecimal ` 来做的。
4646
4747《阿里巴巴 Java 开发手册》中提到:** 浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用 equals 来判断。**
4848
4949![ ] ( https://oss.javaguide.cn/javaguide/image-20211213101646884.png )
5050
5151具体原因我们在上面已经详细介绍了,这里就不多提了。
5252
53- 想要解决浮点数运算精度丢失这个问题,可以直接使用 ` BigDecimal ` 来定义浮点数的值,然后再进行浮点数的运算操作即可 。
53+ 想要解决浮点数运算精度丢失这个问题,可以直接使用 ` BigDecimal ` 来定义小数的值,然后再进行小数的运算操作即可 。
5454
5555``` java
5656BigDecimal a = new BigDecimal (" 1.0" );
You can’t perform that action at this time.
0 commit comments