BigDecimal使用

26 篇文章 0 订阅
9 篇文章 0 订阅
前言:

在使用单双精度float和double的运算过程中面对千万级的小数级上出现错误,对于我们的项目而言很不友好,对此BigDecimal就能很好的解决问题所在BigDecimal类提供了算术,缩放操作,舍入,比较,散列和格式转换的操作。

BigDecimal的使用:

ONE //值1,标度为0。

ROUND_CEILING //向正无穷方向舍入

ROUND_DOWN //向零方向舍入

ROUND_FLOOR //向负无穷方向舍入

ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5

ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN

ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6

ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式

ROUND_UP //向远离0的方向舍入

由于我们使用的都在小数点后俩位,需要设入后俩位

BigDecimal(double val, MathContext mc) 
//将 double转换为 BigDecimal ,根据上下文设置进行舍入。 
BigDecimal(double val)  //将 double转换为 BigDecimal ,这是  double的二进制浮点值的精确十进制表示。 

用这种方法转换而成的BigDecimal对象,最终获取的值与我们想要的值不相同比如:

BigDecimal d1 = new BigDecimal(0.6);

输出值为:

0.59999999999999997779553950749686919152736663818359375

而对于String类型和int类型的数值来说就没有这种问题,所以在数值存放运算时尽量使用String类型和int类型转换数值

在使用BigDecimal加法时出现为0的情况

BigDecimal sum= new BigDecimal("0");
sum.add(entity.getB_points_available());

这是因为在bigdecimal运算时不会将结果赋予原来运算的对象而是新产生的对象,所以要使用另外的对象接收数值

sum=sum.add(entity.getB_points_available());
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Array_new

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值