- 1、BigDecimal类概述
- 2、BigDecimal构造方法
- 1、方法一
- 2、方法二
- 3、方法三
- 3、BigDecimal类成员方法
- 4、BigDecimal示列
Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算.其中 BigInteger 类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类.BigDecimal 类的实现用到了 BigInteger类,不同的是 BigDecimal 加入了小数的概念.float和Double只能用来做科学计算或者是工程计算;在商业计算中,对数字精度要求较高,必须使用 BigInteger 类和 BigDecimal 类,它支持任何精度的定点数,可以用它来精确计算货币值。
由于在运算的时候,float类型和double很容易丢失精度,所以一般不用来做计算货币。
2、BigDecimal构造方法有三种类型的构造方法:
1、方法一BigDecimal BigDecimal(double d); //不允许使用
2、方法二BigDecimal BigDecimal(String s); //常用,推荐使用
3、方法三static BigDecimal valueOf(double d); //常用,推荐使用
1.不推荐使用BigDecimal(double val)构造器,因为使用该构造器时有一定的不可预知性,当程序使用new BigDecimal(0.1)创建一个BigDecimal对象时,它的值并不是0.1,实际上是一个近似0.1的数。
2.建议优先使用基于String的构造器,使用BigDecimal(String val)构造器时可以预知的,写入new BigDecimal(“0.1”)将创建一个恰好等于0.1的BigDecimal。
3.如果必须使用double浮点数作为BigDecimal构造器的参数时,不要使用double作为参数,而应该通过BigDecimal.valueOf(double value)静态方法来创建对象。
3、BigDecimal类成员方法public BigDecimal add(BigDecimal augend):加 public BigDecimal subtract(BigDecimal subtrahend):减 public BigDecimal multiply(BigDecimal multiplicand):乘 public BigDecimal divide(BigDecimal divisor):除 public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode):商,几位小数,舍取模式
4、BigDecimal示列import java.math.BigDecimal;
/**
* @version: V1.0
* @author: fendo
* @className: BigDecimalTest
* @packageName: com.xxx
* @description: BigDecimal测试类
* @data: 2018-04-17 14:23
**/
public class ArithTest {
// 除法运算默认精度
private static final int DEF_DIV_SCALE = 10;
private ArithTest() {
}
/**
* 精确加法
*/
public static double add(double value1, double value2) {
BigDecimal b1 = BigDecimal.valueOf(value1);
BigDecimal b2 = BigDecimal.valueOf(value2);
return b1.add(b2).doubleValue();
}
/**
* 精确减法
*/
public static double sub(double value1, double value2) {
BigDecimal b1 = BigDecimal.valueOf(value1);
BigDecimal b2 = BigDecimal.valueOf(value2);
return b1.subtract(b2).doubleValue();
}
/**
* 精确乘法
*/
public static double mul(double value1, double value2) {
BigDecimal b1 = BigDecimal.valueOf(value1);
BigDecimal b2 = BigDecimal.valueOf(value2);
return b1.multiply(b2).doubleValue();
}
/**
* 精确除法 使用默认精度
*/
public static double div(double value1, double value2) throws IllegalAccessException {
return div(value1, value2, DEF_DIV_SCALE);
}
/**
* 精确除法
* @param scale 精度
*/
public static double div(double value1, double value2, int scale) throws IllegalAccessException {
if(scale
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?