`

47、java.math.BigDecimal类

阅读更多

一、BigDecimal类

 

/**
 * BigDecimal
 * 不可变的、任意精度的有符号十进制数
 * BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。
 * 如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂
 * BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。
 * toString() 方法提供 BigDecimal 的规范表示形式。
 * BigDecimal 类使用户能完全控制舍入行为。
 */
public class BigDecimal extends Number implements Comparable<BigDecimal>
{
	//构造方法

	//将 double 转换为 BigDecimal,后者是 double 的二进制浮点值准确的十进制表示形式
	public BigDecimal(double val){}

	/**
	 * 将 BigDecimal 的字符串表示形式转换为 BigDecimal。
	 * 字符串表示形式由可选符号 '+' ('\u002B') 或 '-' ('\u002D') 组成,后跟零或多个十进制数字(“整数”)的序列,
	 * 可以选择后跟一个小数,也可以选择后跟一个指数。
	 */
	public BigDecimal(String val){}

	//常用方法

	//返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())。
	public BigDecimal add(BigDecimal augend){}

	//返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())。 
	public BigDecimal subtract(BigDecimal subtrahend){}

	//返回一个 BigDecimal,其值为 (this × multiplicand),其标度为 (this.scale() + multiplicand.scale())。 
	public BigDecimal multiply(BigDecimal multiplicand){}

	//返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。如果必须执行舍入,以生成具有指定标度的结果,则应用指定的舍入模式。 
	public BigDecimal divide(BigDecimal divisor,
                         int scale,
                         RoundingMode roundingMode){}

	//返回 BigDecimal,其标度为指定值
	public BigDecimal setScale(int newScale,
                           RoundingMode roundingMode){}

	//返回根据 MathContext 设置进行舍入后的 BigDecimal。如果精度设置为 0,则不进行任何舍入操作。
	public BigDecimal round(MathContext mc){}
}

 

二、MathContext类

 

/**
 * MathContext
 * 该对象是封装上下文设置的不可变对象,它描述数字运算符的某些规则,例如由 BigDecimal 类实现的规则。 
 * 基本独立设置为:
 * precision:某个操作使用的数字个数;结果舍入到此精度 
 * roundingMode:一个 RoundingMode 对象,该对象指定舍入使用的算法。 
 */
public final class MathCont implements Serializable
{
	//构造方法

	//构造一个新的 MathContext,它具有指定的精度和 HALF_UP 舍入模式。
	public MathContext(int setPrecision){}

	//构造一个新的 MathContext,它具有指定的精度和舍入模式。 
	public MathContext(int setPrecision,
                   RoundingMode setRoundingMode){}

	//根据字符串构造一个新的 MathContext。 该字符串的格式必须与 toString() 方法生成的字符串的格式相同。
	public MathContext(String val){}

	//常用方法

	//回 precision 设置。此值始终为非负数。
	public int getPrecision(){}

	//返回 roundingMode 设置
	public RoundingMode getRoundingMode(){}

	//返回此 MathContext 的字符串表示形式,例如: “precision=9 roundingMode=HALF_UP”
	public String toString(){}
}

 

三、RoundingMode枚举

 

/**
 * RoundingMode
 * 为可能丢弃精度的数值操作指定一种舍入行为
 * 此 enum 拟用于取代 BigDecimal(BigDecimal.ROUND_UP、BigDecimal.ROUND_DOWN 等)中舍入模式常量的基于整数的枚举。 
 */
public enum RoundingMode extends Enum<RoundingMode>
{
	CEILING,	//向正无限大方向舍入的舍入模式。
	DOWN,		//向零方向舍入的舍入模式。
	FLOOR,		//向负无限大方向舍入的舍入模式。
	HALF_DOWN,	//向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入
	HALF_EVEN,	//向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
	HALF_UP,	//向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。
	UP,			//远离零方向舍入的舍入模式。
	UNNECESSARY	//用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入
}

 

四、示例

 

import java.math.*;
class  BigDecimalDemo
{
	public static void main(String[] args) 
	{
		String num1 = "2135484.23588";
		String num2 = "0005.2";
		System.out.println(num1+" + "+num2+" = "+add(num1,num2));
		System.out.println(num1+" - "+num2+" = "+sub(num1,num2));
		System.out.println(num1+" * "+num2+" = "+mul(num1,num2));
		System.out.println(num1+" / "+num2+" = "+div(num1,num2,5));

		System.out.println("********************************");

		MathContext mc = new MathContext(3,RoundingMode.HALF_UP);
		System.out.println(num1+" + "+num2+" = "+add(num1,num2).round(mc));
		System.out.println(num1+" - "+num2+" = "+sub(num1,num2).round(mc));
		System.out.println(num1+" * "+num2+" = "+mul(num1,num2).round(mc));
		System.out.println(num1+" / "+num2+" = "+div(num1,num2,5).round(mc));

		System.out.println("********************************");

		System.out.println(num1+" + "+num2+" = "+add(num1,num2).setScale(3,RoundingMode.HALF_UP));
		System.out.println(num1+" - "+num2+" = "+sub(num1,num2).setScale(3,RoundingMode.HALF_UP));
		System.out.println(num1+" * "+num2+" = "+mul(num1,num2).setScale(3,RoundingMode.HALF_UP));
		System.out.println(num1+" / "+num2+" = "+div(num1,num2,5).setScale(3,RoundingMode.HALF_UP));
	}
	//加
	public static BigDecimal add(String num1,String num2)
	{
		BigDecimal bi1 = new BigDecimal(num1);
		BigDecimal bi2 = new BigDecimal(num2);
		return bi1.add(bi2);
	}
	//减
	public static BigDecimal sub(String num1,String num2)
	{
		BigDecimal bi1 = new BigDecimal(num1);
		BigDecimal bi2 = new BigDecimal(num2);
		return bi1.subtract(bi2);
	}
	//乘
	public static BigDecimal mul(String num1,String num2)
	{
		BigDecimal bi1 = new BigDecimal(num1);
		BigDecimal bi2 = new BigDecimal(num2);
		return bi1.multiply(bi2);
	}
	//除
	public static BigDecimal div(String num1,String num2,int scale)
	{
		BigDecimal bi1 = new BigDecimal(num1);
		BigDecimal bi2 = new BigDecimal(num2);
		return bi1.divide(bi2,scale,RoundingMode.HALF_UP);
	}
}

 

分享到:
评论

相关推荐

    java.math.BigDecimal 操作类

    java.math.BigDecimal 操作类,包含加减乘除、String型加减乘除精度格式化转换计算等

    Can't find a codec for class java.math.BigDecimal.txt

    解决mongo数据插入时 报错问题 mogodb插入数据时报错Can't find a codec for class java.math.BigDecimal

    A Class for Creating a Trace Log(153KB)

    A Class for Creating a Trace Log(153KB)

    BigDecimal 加减乘除运算

    Java中BigInteger的数学运算,BigDecimal 加减乘除运算,Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大...

    Java对BigDecimal常用方法的归类 -计算机等级考试-考试吧

    JAVA基础:java.math.BigDecimal的使用方法. JAVA基础:java.math.BigDecimal的使用方法.

    使用java理解程序逻辑第十七章(完结篇)

    java入门基础,入门宝典,新手学习必备,好东西不容错过!

    关于java中BigDecimal的简介(csdn)————程序.pdf

    关于java中BigDecimal的简介(csdn)————程序

    BigDecimalUtils

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做...

    计算器代吗

    import java.math.BigDecimal; import java.util.regex.Pattern; import com.android.xiong.gridlayoutTest.R.id; import android.os.Bundle; import android.app.Activity; import android.view.Menu; ...

    Java 加减乘除工具类(解决精度损失问题)

    import java.math.BigDecimal; import java.text.DecimalFormat; public class Calculation { public static final DecimalFormat df = new DecimalFormat("######0.00"); /** * @methodName format2point * @...

    JAVA_API1.6文档(中文)

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    javaInteger大数据运算.pdf

    import java.math.BigDecimal; import java.math.BigInteger; public class DemoInteger{ public static void main(String[] args) { //四则运算:BigInteger ⼤的数据的运算 BigInteger b1=new BigInteger(...

    springboot整合mongo自定义Converter 实现字符串和Date类型互转 并且查询陈宫

    使用自定义了时间和字符串的转换规则 存的时候 ...下载后 直接运行 Test类 修改下MongodbConfiguration的mongoUrl 写的时候将时间转为字符串 读的时候将字符串转为日期 查找的时候可以使用时间类型 Test类里面都有展示

    java.math包下计算浮点数和整数的类的实例

    主要介绍了java.math包下计算浮点数和整数的类的实例代码,本文通过使用BigDecimal进行浮点数比较给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    JDK_API_1_6_zh_CN_downcc.com.zip 良心一级分

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    acm之java大数用法

    java.util 中 BigInteger 的使用; java.math 中 BigDecimal 的使用;&& so on. . .

    1_6_zh_CN.CHM

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

    commons-math3-3.6.1-API文档中文版

    math3是一款非常好用的工具,里面提供了各种运算的方法及类,方便大家调用。 apache-commons-math3是java的一种科学计算类库,实现科学计算功能的类库其他语言如python、scala都有很多而且很容易找到资料,java可能...

    介绍Java的大数类(BigDecimal)和八种舍入模式

    在实际应用中,需要对更大或者更小的数进行运算...Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。本文将介绍Java中的大数类BigDecimal及其八种舍入模式,有需要的可以参考借鉴。

    java jdk-api-1.6 中文 chmd

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

Global site tag (gtag.js) - Google Analytics