关于BigDecimal的divide()方法。。。求解。。。。。。。。。。。。。。。。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于BigDecimal的divide()方法。。。求解。。。。。。。。。。。。。。。。。相关的知识,希望对你有一定的参考价值。

import java.math.*;
public class Test
public static void main(String[] args)
BigDecimal a=new BigDecimal(0.5);
BigDecimal b=new BigDecimal(0.2);
System.out.println(a.divide(b));


为什么会出错啊?
0.5除以0.2 不就是2.5么?
错误信息:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

BigDecimal的除法,需要指定计算答案的精度,那样肯定会报异常。

MathContext mc = new MathContext(2, RoundingMode.HALF_DOWN);

BigDecimal a = new BigDecimal(0.5);

BigDecimal bd1 = new;

BigDecimal("30000000000000000000000000000000000000000000000000000000000");

BigDecimal bd2 = new BigDecimal(3);

//MathContext,第一个参数表示你要保留几位小数,第二参数表示最后一位是取顶。

构造方法

BigDecimal一共有4个构造方法:

BigDecimal(int) 创建一个具有参数所指定整数值的对象。

BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)

BigDecimal(long) 创建一个具有参数所指定长整数值的对象。

BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。

参考技术A BigDecimal的除法,需要指定计算答案的精度,你那样肯定会报异常。虽然你知道答案为2.5,但计算机不知道你的精度为多少,会抛异常的。
我给你写一段,

MathContext mc = new MathContext(2, RoundingMode.HALF_DOWN);
//精度为2,舍入模式为大于0.5进1,否则舍弃。
BigDecimal a = new BigDecimal(0.5);
BigDecimal b = new BigDecimal(0.2);
System.out.println(a.divide(b,mc));本回答被提问者和网友采纳
参考技术B 0.5,0.2加双引号,直接出答案2.5
也可以按楼上的方法做
参考技术C BigDecimal 的 divide 是可以指定精度运算的:

BigDecimal a=new BigDecimal(0.5);
BigDecimal b=new BigDecimal(0.2);
System.out.println( a.divide(b) , 2 , BigDecimal.ROUND_HALF_UP );
// ROUND_HALF_UP是BigDecimal的一个常量,表示进行四舍五入的操作
参考技术D BigDecimal bigDecimal1 = new BigDecimal(100.0);
BigDecimal bigDecimal2 = new BigDecimal(33.0);
BigDecimal b = bigDecimal1.divide(bigDecimal2,0,BigDecimal.ROUND_DOWN);
取整数

关于BigDecimal小记

昨天在写一个关于金额计算的时候,随手用了BIgDecimal结果出问题了,如下图NO.3那样,期望值是10.00,结果是10.1...

后来发现犯了一个想当然的错误,那就是两个参数的构造方法是这样的,如下图:

也就是说divide(d,2)中的2并不再是取两位小数的意思了,而是RoundingMode的枚举值2,然而scale的默认值是1

 

因此对于这样的结果也就不足为奇了!!

以上是关于关于BigDecimal的divide()方法。。。求解。。。。。。。。。。。。。。。。。的主要内容,如果未能解决你的问题,请参考以下文章

关于BigDecimal小记

Java里面BigDecimal.divide()方法能不能实现保留小数点前后共35位这样的操作

Java里面BigDecimal.divide()方法能不能实现保留小数点前后共35位这样的操作

在 BigDecimal.divide 期间引发 ArithmeticException

bigdecimal的使用

Bigdecimal常用操作