首页 > 编程知识 正文

bigdecimal转换为int(bigdecimal除法精度)

时间:2023-05-03 11:09:37 阅读:97272 作者:3940

让我们首先看看下面的代码示例:

公共类测试_1 {

公共静态void main(String[]args){ 0

system . out . println(0.06 0.01);

system . out . println(1.0-0.42);

system . out . println(4.015 * 100);

system . out . println(303.1/1000);

}

}

结果如下。

0.06999999999999999

0.5800000000000001

401.49999999999994

0.30310000000000004

你以为自己错了,结果却是这样。有什么问题?原因是我们的计算机是二进制的。浮点数没有办法用二进制精确表示。我们的CPU表示浮点数由指数和尾数两部分组成。这种表示方法一般会失去一定的精度,一些浮点运算也会产生一定的误差。例如,2.4的二进制表示并不完全是2.4。相反,最接近的二进制表示是2.39790.007070700775浮点数的值实际上是通过特定的数学公式计算出来的。

实际上,java的float只能用于科学计算或工程计算。在大多数商业计算中,java.math.BigDecimal类通常用于精确计算。

使用BigDecimal类进行计算时,主要包括以下步骤:

1.使用浮点或双变量来构建BigDecimal对象。

2.通过调用BigDecimal的加减乘除等相应方法进行算术运算。

3.将BigDecimal对象转换为浮点、双精度、整数和其他类型。

一般来说,可以使用BigDecimal的构造方法或者静态方法的valueOf()方法将基本类型变量构造成BigDecimal对象。

BigDecimal b1=新的big decimal(double . tostring(0.48));

big decimal B2=big decimal . value of(0.48);

对于常用的加减乘除,BigDecimal类提供了相应的成员方法。

公共BigDecimal add(BigDecimal值);//添加

公共大十进制减法(大十进制值);//减法

公共大十进制乘数(大十进制值);//乘法

公共大十进制除法器(大十进制值);//分部

在进行相应的计算之后,我们可能需要将BigDecimal对象转换为相应基本数据类型的变量,使用floatValue()和doubleValue()等方法。

下面是一个提供加法、减法、乘法和除运算的工具类。

公立学校

/**

*加法方法提供精确的加法计算

* @param value1地址

* @param value2地址

* @返回两个参数的和

*/

公共静态double add(double value1,double value 2){ 0

BigDecimal b1=新的big decimal(double . value of(value 1));

BigDecimal b2=新的big decimal(double . value of(value 2));

返回b1.add(b2)。double value();

}

/**

*子方法提供精确的减法运算

* @参数值1分钟结束

* @param value2减少

* @返回两个参数之间的差异

*/

公共静态双sub(双值1,双值2){ 0

BigDecimal b1=新的big decimal(double . value of(value 1));

BigDecimal b2=新的big decimal(double . value of(value 2));

返回b1 .减去(b2)。double value();

}

/**

*提供精确乘法的mul方法

* @参数值1被乘数

* @param value2乘数

* @返回两个参数的乘积

*/

公共静态double mul(double value1,double value 2){ 0

BigDecimal b1=新的big decimal(double . value of(value 1));

BigDecimal b2=新的big decimal(double . value of(value 2));

返回b1 .乘(b2)。double value();

}

/**

*提供准确的划分方法

* @param value1股息

* @param value2除数

* @param刻度精确范围

* @两个参数的返回商

* @抛出IllegalAccessException

*/

公共静态double div(double value1,double value2,int scale)引发IllegalAccessException{

//如果精确范围小于0,抛出异常消息。

if(scale 0){ 0

Thrownnewillegalaccessexception('精度不能小于0 ');

}

BigDecimal b1=新的big decimal(double . value of(value 1));

BigDecimal b2=新的big decimal(double . value of(value 2));

返回b1 .除(b2,刻度)。double value();

}

/**

*佘宇

* @param value1股息

* @param value2除数

* @param刻度精确范围

* @两个参数的返回商

* @抛出IllegalAccessException

*/

公共静态BigDecimal div2(双精度值1,双精度值2,整数比例)引发IllegalAccessException{

BigDecimal b1=新的大十进制(双精度。值(值1));

BigDecimal b2=新的大十进制(双精度。值(值2));

返回b1 .除法(b2,缩放,舍入模式.FLOOR);

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。