浮点数精度问题 —— BigDecimal

BigDecimal代替浮点数

1 介绍

BigDecimal提供了多个构造函数,和浮点数有关的有:

  • BigDecimal(double val) Translates a double into a BigDecimal.
  • BigDecimal(String val) Translates the String representation of a BigDecimal into a BigDecimal.

用double参数来创建对象得到不精确的值,只有通过String来创建对象才是最准确的。

2 例子

BigDecimal data1=new BigDecimal(0.05);
System.out.println(data1.toString());

得到结果:0.05000000000000000277555756156289135105907917022705078125

BigDecimal data2=new BigDecimal("0.05");
System.out.println(data2.toString());

得到结果:0.05

3 浮点数精度问题

  • 问题原因:浮点数在内存中是近似存储
  • 避免问题的办法:
    方法1:不用浮点数,用整数代替,例如进行资金运算时,按单位为分的整数进行运算;
    方法2:使用BigDecimal代替浮点数

4 BigDecimal.valueOf(double val)创建对象

public static BigDecimal valueOf(double val)
{ 
   return new BigDecimal(Double.toString(val));
 }

总结:BigDecimal的加减乘除其实最终都返回的是一个新的BigDecimal对象

5 例子

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值