BigDecimal失真问题

   BigDecimal用于对超过16位有效位的数进行精确计算

常用构造方法

1、BigDecimal(int)

创建一个具有参数所指定整数值的对象

2、BigDecimal(double)

创建一个具有参数所指定双精度值的对象

3、BigDecimal(long)

创建一个具有参数所指定长整数值的对象

1、BigDecimal(String)

创建一个具有参数所指定字符串表示的数值的对象

问题分析

代码示例:

BigDecimal a = new BigDecimal(0.1);

BigDecimal b = new BigDecimal("0.1");

System.out.println("a:"+ a);

System.out.println("b:"+ b);

 输出:

a:0.1000000000000000055511151231257827021181583404541015625

b:0.1

原因分析:

参数类型为double的构造方法的结果有一定的不可预知性,实际等于 0.1000000000000000055511151231257827021181583404541015625,因为0.1无法准确的表示为double;

String的构造方法是完全可预知的,b的值即为预知的0.1。

常用方法:

  • add(BigDecimal)

BigDecimal对象中的值相加,返回BigDecimal对象

  • subtract(BigDecimal)

BigDecimal对象中的值相减,返回BigDecimal对象

  • multiply(BigDecimal)

BigDecimal对象中的值相乘,返回BigDecimal对象

  • divide(BigDecimal)

BigDecimal对象中的值相除,返回BigDecimal对象

  • toString()

将BigDecimal对象中的值转换成字符串

  • doubleValue()

将BigDecimal对象中的值转换成双精度数

  • floatValue()

将BigDecimal对象中的值转换成单精度数

  • longValue()

将BigDecimal对象中的值转换成长整数

  • intValue()

将BigDecimal对象中的值转换成整数

  • compareTo(BigDecimal2)

将调用该方法的BigDecimal对象与BigDecimal2做比较 

int a = bigdemical.compareTo(bigdemical2)

返回结果分析:

a = -1,表示bigdemical小于bigdemical2;
a = 0,表示bigdemical等于bigdemical2;
a = 1,表示bigdemical大于bigdemical2;

如果需要传如double类型的数值到BigDecimal,建议使用如下方法:

BigDecimal b1 = new BigDecimal(Double.toString(v1));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值