一、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 操作类,包含加减乘除、String型加减乘除精度格式化转换计算等
解决mongo数据插入时 报错问题 mogodb插入数据时报错Can't find a codec for class java.math.BigDecimal
标题"A Class for Creating a Trace Log"指出,这是一个关于创建跟踪日志的类的教程或代码示例。在软件开发中,跟踪日志是用于记录程序运行时信息的重要工具,它帮助开发者诊断错误、调试代码以及优化性能。这个类...
Java中的`BigDecimal`类是用于表示和操作高精度浮点数的重要工具,尤其适用于需要进行精确计算的场景,如财务和货币计算。由于基本数据类型`double`和`float`在进行大数值或高精度计算时可能会导致精度丢失,因此`...
在Java编程语言中,处理大数(大数据量的整数)加法时,通常会使用`java.math.BigDecimal`类。这个类提供了精确的浮点数运算,特别适合于需要高精度计算的情况,如金融计算或者复杂的数学运算。下面将详细讨论`...
Java中BigInteger的数学运算,BigDecimal 加减乘除运算,Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大...
JAVA基础:java.math.BigDecimal的使用方法. JAVA基础:java.math.BigDecimal的使用方法.
在Java编程语言中,`java.lang.Math`类提供了一系列用于执行基本数学运算的方法和常量。这个类包含静态方法和常量,使得开发者无需实例化对象即可直接调用其功能,极大地简化了数学计算的过程。 ### 常量 #### ...
在Java中,有内置的`java.math.BigDecimal`类,但JavaScript原生并不支持这样的数据类型。因此,"js_bigdecimal_1_0_1"库可能是将Java的BigDecimal概念移植到了JavaScript中,以便在Web开发中进行高精度计算。 这个...
Java.math 包下计算浮点数和整数...Java.math 包下计算浮点数和整数的类的实例非常重要, BigInteger 和 BigDecimal 两个类是 Java.math 包中的核心类,它们提供了高精度的整数和浮点数运算,用于解决复杂的数学问题。
* java.math 是 Java 2 Platform 的一部分,提供了用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 21、网络应用程序:java.net 为实现网络应用程序提供类。 * java.net 是 Java 2...
除了这些基本的数学操作,Java还提供了其他类来处理复数(`java.math.Complex`),大数(`java.math.BigInteger`和`java.math.BigDecimal`)以及高精度浮点数(`java.math.BigDecimal`)。这些类在需要更高精度或更...
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做...
在《Effective Java》这本书中也提到这个原则,float 和 double 只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。BigDecimal 一共有 4 个够造方法,我们可以使用 BigDecimal(double ...
通过阅读`BigInteger.java`和`BigDecimal.java`的源代码,我们可以深入了解这两个类的实现细节,包括它们如何存储和操作数值,以及各种算法的实现。源代码分析可以帮助我们理解内部工作原理,提高性能优化的能力,...
NUMBER(p, s)对应的 JDBC 类型是 java.sql.Types.DECIMAL,Java 类型也是 java.math.BigDecimal。 3. 日期和时间类型 DATE 对应的 JDBC 类型是 java.sql.Types.DATE,Java 类型是 java.sql.Date。TIMESTAMP ...
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.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....
在Java编程语言中,`Math`类提供了几个用于处理数值的静态方法,其中包括`Math.round()`, `Math.ceil()`, 和 `Math.floor()`。这些方法主要用于处理浮点数,将它们转换成整数,但每种方法的取整策略不同。下面我们将...