关于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) 创建一个具有参数所指定以字符串表示的数值的对象。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-30
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));本回答被提问者和网友采纳
第2个回答  2012-09-17
0.5,0.2加双引号,直接出答案2.5
也可以按楼上的方法做
第3个回答  2012-11-02
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的一个常量,表示进行四舍五入的操作
第4个回答  2017-09-11
BigDecimal bigDecimal1 = new BigDecimal(100.0);
BigDecimal bigDecimal2 = new BigDecimal(33.0);
BigDecimal b = bigDecimal1.divide(bigDecimal2,0,BigDecimal.ROUND_DOWN);
取整数

关于BigDecimal的divide()方法。。。求解。。。
构造方法 BigDecimal一共有4个构造方法:BigDecimal(int) 创建一个具有参数所指定整数值的对象。BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)BigDecimal(long) 创建一个具有参数所指定长整数值的对象。BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。

java的bigdecimal类的用法
首先是bigdecimal的初始化,加法 add()函数、减法subtract()函数、乘法multiply()函数、除法divide()函数、绝对值abs()函数。注意:1)System.out.println()中的数字默认是double类型的,double类型小数计算不精准。2)使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的!因为不是所有的浮点...

BigDecimal类有哪些方法和用法?
4. 除法:使用divide()方法,如:BigDecimal div = ***.divide(mdBigDecimal); 输出为"除法:" + div。BigDecimal类还提供了4个构造函数,用于根据不同的需求创建对象:(1)int类型,如BigDecimal(int value);(2)double类型,但不建议使用BigDecimal(double),因为可能存在精度损失;(3)long类型...

关于BigDec方法。。。求解。。。
BigDecimal b = new BigDecimal(0.2);System.out.println(a.divide(b, mc)); \/\/ 明确精度后进行除法运算 这样,当你在BigDecimal的除法运算中使用这个MathContext,就可以确保得到预期的2.5结果,而不会因为精度问题引发异常。务必记得在进行除法操作前设置合适的精度,以确保运算的正确性。

bigdecimal加减乘除运算顺序
bigdecimal的运算顺序涉及其基础操作,包括初始化和各类函数的调用。首先,你需要进行加法add()、减法subtract()、乘法multiply()以及除法divide()的运算。同时,绝对值abs()也是常用的功能之一。在使用过程中,需要注意以下几点:系统默认的打印方法system.***.println()中,如果涉及double类型数值,可能存在...

怎么解决BigDecimal里面无限循环小数的问题
通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛这个异常。解决之道:就是给divide设置精确的小数点divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN);

java中 BigDecimal的类型的除法
package cn.itcast_02; import java.math.BigDecimal; \/* * 构造方法: * public BigDecimal(String val): * * 金融相关的东西(例:银行钱的小数,商品价格小数,实验小数) * * 成员方法: * public BigDecimal add(BigDecimal augend):加 * public BigDecimal subtract...

BigDecimal使用详解
一、构造方法 BigDecimal的构造方法有很多种,大家最常用的如下方式:BigDecimal bd1=new BigDecimal(10);BigDecimal bd2=new BigDecimal("10");二、四则预算 加法:bigDecimal1.add(bigDecimal2);减法:bigDecimal1.subtract(bigDecimal2);乘法:bigDecimal1.multiply(bigDecimal2);除法:bigDecimal1.divide(...

BigDecimal笔记
在执行除法运算时,可能出现非终止的十进制展开。这通常是因为BigDecimal需要确切的数值,但在除法过程中可能产生无限循环,导致无法获得精确结果。为解决此问题,在使用divide方法时,可采用四舍五入或其他获取近似值的方法,避免精度丢失。divide方法定义 BigDecimal.divide(BigDecimal divisor, int scale, ...

bigdecimal加减乘除有哪些?
BigDecimal除法可能出现不能整除的情况,比如 4.5\/1.3,这时会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。其实divide方法有可以传三个参数:public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 第一参数表示除数, ...

相似回答