概述
BigDecimal,不可变的、任意精度的有符号十进制数。
BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度(scale) 组成。
如果为零或正数,则标度是小数点后的位数。
如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。
因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。我们知道BigDecimal有三个主要的构造函数
public BigDecimal(double val) 将double表示形式转换为BigDecimal
public BigDecimal(int val) 将int表示形式转换为BigDecimal
public BigDecimal(String val) 将字符串表示形式转换为BigDecimal
总结:
1:尽量避免传递double类型,有可能的话,尽量使用int和String类型。
2:做乘除计算时,一定要设置精度和保留小数点位数。
3:BigDecimal计算时,单独放到try catch内。
如果需要精确计算,非要用String来够造BigDecimal不可!
在Java中,float声明的变量是单精度浮点数,double声明的变量是双精度浮点数,顾名思义就是double型的实体占用内存空间是float的两倍。float是4个字节而double是8个字节。float和double类型的数据,无法精确表示计算结果,这是由于float和double是不精确的计算
我们最终需要使用String来创建对象,这样得到的结果才是最精确的。另外,如果是double数,我们还可以使用:BigDecimal.valueOf(double val)
最后
以上就是贤惠大炮为你收集整理的BigDecimal 小数精度问题的全部内容,希望文章能够帮你解决BigDecimal 小数精度问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复