Java应用之数字工具类:Match类BigDecimal类

Match类

不能实例对象  private构造方法

简介

java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具
类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。
Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。
与StrictMath类的一些数字方法不同,Math类的StrictMath所有Math都没有定义为返回比特位相同的结果。 这种放松允许在不需要严格再现性的情况下执行更好的实现。

默认情况下,许多Math方法只需调用中的对应方法是StrictMath组织落实。 鼓励代码生成器使用平台特定的本机库或微处理器指令(如果可用),以提供Math方法的Math实现。 这种更高性能的实现仍然必须符合Math的Math 。

实施规范的质量有两个属性,返回结果的准确性和方法的单调性。 的浮点精度Math方法在ULPS,单位在最后的地方来衡量。 对于给定的浮点格式, ulp特定实数值的是两个浮点值包围该数值之间的距离。 当讨论整个方法的准确性而不是一个具体的参数时,引用的ulps的数量是任何参数的最坏情况错误。 如果方法总是出现小于0.5 ulps的错误,则该方法总是返回最接近精确结果的浮点数; 这种方法是正确的四舍五入 。 一个正确舍入的方法通常是一个最好的浮点近似可以; 然而,对于许多浮点方法来说,这是不切实际的。 相反,对于Math类,某些方法允许更大的1或2 Math的误差范围。 非正式地,使用1 ul的错误限制,当确切的结果是可表示的数字时,应该将精确的结果作为计算结果返回; 否则,可以返回包含确切结果的两个浮点值之一。 对于大量的精确结果,支架的端点之一可能是无限大的。 除了个人论证的准确性之外,维持不同论点的方法之间的适当关系也很重要。 因此,绝大多数0.5 ulp误差的方法都是半单调的 :每当数学函数不减小时,数学函数也是不减少的,同样地,当数学函数不增加时,浮点数近似也是如此点近似。 并非所有具有1 ulp精度的近似值将自动满足单调性要求。

该平台使用带有int和long基元类型的带符号二进制补码整数运算。 开发人员应该选择原始类型,以确保算术运算始终产生正确的结果,这在某些情况下意味着操作不会溢出计算值的范围。 最佳做法是选择原始类型和算法以避免溢出。 在情况下,大小为int或long ,需要检测溢出错误,方法addExact , subtractExact , multiplyExact和toIntExact抛出ArithmeticException结果溢出时。 对于其他算术运算,如除法,绝对值,递增,递减和否定溢出仅在特定的最小值或最大值发生时,应根据最小值或最大值进行检查。

所属包

java.lang 
Class Math
java.lang.Object 
java.lang.Math 

public final class Math extends Object

静态方法


public static double abs(double a) 返回 double 值的绝对值
public static double ceil(double a) :返回大于等于参数的最小的整数。
public static double floor(double a) :返回小于等于参数最大的整数。
public static long round(double a) :返回最接近参数的 long。(相当于四舍五入方法)
public static double max(double a, double b) 返回两个 double值中的较大值。
public static double min(double a, double b) 返回两个 double的较小值。
public static double pow(double a, double b) 将第一个参数的值返回到第二个参数的幂。   
 
方法太多用的时候翻找jdk说明吧

BigDecimal类

简介

计算类不会损失精准度。
BigDecimal类提供了算术,缩放操作,舍入,比较,散列和格式转换的操作。 toString()方法提供了一个BigDecimal的规范BigDecimal 。

BigDecimal类提供了算术,缩放操作,舍入,比较,散列和格式转换的操作。 toString()方法提供了一个BigDecimal的规范BigDecimal 。

所属包

java.lang.Object 
java.lang.Number 
java.math.BigDecimal 
public class BigDecimal extends Number implements Comparable<BigDecimal>

构造方法

⭐
BigDecimal(double val) 将 double转换为 BigDecimal ,这是 double的二进制浮点值的精确十进制表示。  
BigDecimal(double val, MathContext mc) 将 double转换为 BigDecimal ,根据上下文设置进行舍入。  
⭐⭐
BigDecimal(int val) 将 int成 BigDecimal 。  
BigDecimal(int val, MathContext mc) 将 int转换为 BigDecimal ,根据上下文设置进行舍入。  
⭐⭐⭐
BigDecimal(long val)将 long成 BigDecimal 。  
BigDecimal(long val, MathContext mc) 将 long转换为 BigDecimal ,根据上下文设置进行舍入。 
⭐⭐ 
BigDecimal(String val) 
将BigDecimal的字符串表示 BigDecimal转换为 BigDecimal 。 
⭐⭐ 
BigDecimal(String val, MathContext mc) 
一个转换的字符串表示 BigDecimal成 BigDecimal ,接受相同的字符串作为 BigDecimal(String)构造,利用根据上下文设置进行舍入。  

静态方法

⭐⭐
static BigDecimal valueOf(double val) 转换一个 double成 BigDecimal ,使用 double通过所提供的规范的字符串表示 Double.toString(double)方法。
⭐⭐  
static BigDecimal valueOf(long val) 将 long值转换为 BigDecimal ,比例为零。  


接口方法

加⭐⭐⭐
BigDecimal add(BigDecimal augend) 返回 BigDecimal ,其值是 (this + augend) ,其标为 max(this.scale(), augend.scale()) 。 
BigDecimal add(BigDecimal augend, MathContext mc) 返回 BigDecimal ,其值是 (this + augend) ,根据上下文设置进行舍入。
减⭐⭐⭐
BigDecimal subtract(BigDecimal subtrahend) 返回 BigDecimal ,其值是 (this - subtrahend) ,其标为 max(this.scale(), subtrahend.scale())
BigDecimal subtract(BigDecimal subtrahend, MathContext mc) 返回 BigDecimal ,其值是 (this - subtrahend) ,根据上下文设置进行舍入  。 
   
乘⭐⭐⭐
BigDecimal multiply(BigDecimal multiplicand) 返回 BigDecimal ,其值是 (this × multiplicand),其标为 (this.scale() + multiplicand.scale()) 。  
BigDecimal multiply(BigDecimal multiplicand, MathContext mc) 返回 BigDecimal ,其值是 (this × multiplicand),根据上下文设置进行舍入。 

取余⭐⭐
BigDecimal remainder(BigDecimal divisor) 返回 BigDecimal ,其值是 (this % divisor) 。  
BigDecimal remainder(BigDecimal divisor, MathContext mc) 返回 BigDecimal ,其值是 (this % divisor) ,根据上下文设置进行舍入。

除⭐⭐⭐
BigDecimal divide(BigDecimal divisor, MathContext mc) 返回 BigDecimal ,其值是 (this / divisor) ,根据上下文设置进行舍入。  
BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode) 返回 BigDecimal ,其值是 (this / divisor) ,其标为 this.scale() 。  
⭐⭐⭐
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)  
scale 表示保留几位
roundingMode 表示表示取舍方式 
BigDecimal.ROUND_UP   +1
BigDecimal.ROUND_DOWN  取尾 
BigDecimal.ROUND_HALF_DOWN  四舍五入

绝对值⭐
BigDecimal abs() 返回一个 BigDecimal ,其值为此 BigDecimal的绝对值,其缩放比例为 this.scale() 。 
BigDecimal abs(MathContext mc) 返回一个 BigDecimal ,其值为此 BigDecimal的绝对值,根据上下文设置进行舍入。  
获取double⭐
double doubleValue() 将此 BigDecimal转换为 double 。  
比较⭐⭐⭐
boolean equals(Object x) 将此 BigDecimal与指定的 Object进行比较以获得相等性。  
BigDecimal max(BigDecimal val) 返回此 BigDecimal和 val 。  
BigDecimal min(BigDecimal val) 返回此 BigDecimal和 val 。  

移动小数点
BigDecimal movePointLeft(int n) 返回一个 BigDecimal ,相当于这个小数点,向左移动了 n个地方。  
BigDecimal movePointRight(int n) 返回一个 BigDecimal ,相当于这个小数点移动了 n个地方。  
四舍五入
BigDecimal round(MathContext mc) 返回 BigDecimal根据四舍五入 MathContext设置。 
获取字符串⭐
String toString() 
返回此 BigDecimal的字符串表示,如果需要指数,则使用科学计数法。  

补充精准度类 MathContext

简介:
封装了描述数值运算符某些规则的上下文设置的不可变对象,例如由BigDecimal类实现的那些规则。
独立于基地的设置有:

precision :用于操作的位数; 结果四舍五入到这个精度
roundingMode :一个RoundingMode对象,它指定用于舍入的算法。


所属包
java.math 
Class MathContext


public final class MathContext extends Object implements Serializable


构造方法
MathContext(int setPrecision) 
构造一个新的 MathContext具有指定的精度和 HALF_UP舍入模式。  
MathContext(int setPrecision, RoundingMode setRoundingMode) 
构造一个新的 MathContext ,具有指定的精度和舍入模式。  
MathContext(String val) 
从一个字符串构造一个新的 MathContext 。  

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的BigDecimal提供了精确的十进制运算,可以避免浮点数运算精度丢失的问题。以下是一个简单的BigDecimal 工具类的示例,可以方便地进行加、减、乘、除、取反、取绝对值、比较大小等操作: ```java import java.math.BigDecimal; public class BigDecimalUtil { private static final int DEFAULT_SCALE = 2; //默认保留小数点后2位 public static BigDecimal add(BigDecimal v1, BigDecimal v2) { return v1.add(v2); } public static BigDecimal subtract(BigDecimal v1, BigDecimal v2) { return v1.subtract(v2); } public static BigDecimal multiply(BigDecimal v1, BigDecimal v2) { return v1.multiply(v2); } public static BigDecimal divide(BigDecimal v1, BigDecimal v2) { return v1.divide(v2, DEFAULT_SCALE, BigDecimal.ROUND_HALF_UP); } public static BigDecimal negate(BigDecimal v) { return v.negate(); } public static BigDecimal abs(BigDecimal v) { return v.abs(); } public static int compare(BigDecimal v1, BigDecimal v2) { return v1.compareTo(v2); } public static boolean equals(BigDecimal v1, BigDecimal v2) { return v1.compareTo(v2) == 0; } public static boolean greaterThan(BigDecimal v1, BigDecimal v2) { return v1.compareTo(v2) > 0; } public static boolean lessThan(BigDecimal v1, BigDecimal v2) { return v1.compareTo(v2) < 0; } } ``` 使用示例: ```java BigDecimal v1 = new BigDecimal("100.12"); BigDecimal v2 = new BigDecimal("80.88"); BigDecimal result = BigDecimalUtil.add(v1, v2); // 181.00 result = BigDecimalUtil.subtract(v1, v2); // 19.24 result = BigDecimalUtil.multiply(v1, v2); // 8109.6256 result = BigDecimalUtil.divide(v1, v2); // 1.24 result = BigDecimalUtil.negate(v1); // -100.12 result = BigDecimalUtil.abs(new BigDecimal("-100.12")); //100.12 int compareResult = BigDecimalUtil.compare(v1, v2); //1 boolean equalResult = BigDecimalUtil.equals(v1, v2); //false boolean greaterThanResult = BigDecimalUtil.greaterThan(v1, v2); //true boolean lessThanResult = BigDecimalUtil.lessThan(v1, v2); //false ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值