mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-16 18:10:13 +08:00
Update bigdecimal.md
浮点数和小数是不同的概念,这里有些混淆。浮点数是计算机常用的表示小数的方式,而bigDecimal是用来解决二进制浮点数无法精确表示十进制小数的问题。本质上,bigDecimal也是浮点数,只不过是十进制浮点数。
This commit is contained in:
parent
c40ec4c457
commit
98fb76bc59
@ -21,7 +21,7 @@ System.out.println(a == b);// false
|
||||
|
||||
**为什么浮点数 `float` 或 `double` 运算的时候会有精度丢失的风险呢?**
|
||||
|
||||
这个和计算机保存浮点数的机制有很大关系。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么浮点数没有办法用二进制精确表示。
|
||||
这个和计算机保存小数的机制有很大关系。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。这也就是解释了为什么十进制小数没有办法用二进制精确表示。
|
||||
|
||||
就比如说十进制下的 0.2 就没办法精确转换成二进制小数:
|
||||
|
||||
@ -40,9 +40,9 @@ System.out.println(a == b);// false
|
||||
|
||||
## BigDecimal 介绍
|
||||
|
||||
`BigDecimal` 可以实现对浮点数的运算,不会造成精度丢失。
|
||||
`BigDecimal` 可以实现对小数的运算,不会造成精度丢失。
|
||||
|
||||
通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 `BigDecimal` 来做的。
|
||||
通常情况下,大部分需要小数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 `BigDecimal` 来做的。
|
||||
|
||||
《阿里巴巴 Java 开发手册》中提到:**浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用 equals 来判断。**
|
||||
|
||||
@ -50,7 +50,7 @@ System.out.println(a == b);// false
|
||||
|
||||
具体原因我们在上面已经详细介绍了,这里就不多提了。
|
||||
|
||||
想要解决浮点数运算精度丢失这个问题,可以直接使用 `BigDecimal` 来定义浮点数的值,然后再进行浮点数的运算操作即可。
|
||||
想要解决浮点数运算精度丢失这个问题,可以直接使用 `BigDecimal` 来定义小数的值,然后再进行小数的运算操作即可。
|
||||
|
||||
```java
|
||||
BigDecimal a = new BigDecimal("1.0");
|
||||
|
Loading…
x
Reference in New Issue
Block a user