首页 > 其他分享 >BigDecimal运算

BigDecimal运算

时间:2023-03-20 20:05:58浏览次数:55  
标签:return BigDecimal double param v1 v2 运算




import java.math.BigDecimal;   
/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
* 确的浮点数运算,包括加减乘除和四舍五入。
*/
public class Arith{ //默认除法运算精度
private static final int DEF_DIV_SCALE = 10; //这个类不能实例化
private Arith(){
}
/**
* 提供精确的加法运算。
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
public static double add(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
/**
* 提供精确的减法运算。
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
public static double sub(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供精确的乘法运算。
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
public static double mul(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
* 小数点以后10位,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @return 两个参数的商
*/
public static double div(double v1,double v2){
return div(v1,v2,DEF_DIV_SCALE);
}
/**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
* 定精度,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static double div(double v1,double v2,int scale){
if(scale<0){
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的小数位四舍五入处理。
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
public static double round(double v,int scale){
if(scale<0){
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
};

标签:return,BigDecimal,double,param,v1,v2,运算
From: https://blog.51cto.com/u_3871599/6138537

相关文章

  • BigInteger和BigDecimal18
    BigInteger在Java中,由CPU原生提供的整型最大范围是64位​​long​​型整数。使用​​long​​型整数可以直接通过CPU指令进行计算,速度非常快。如果我们使用的整数范围超过了......
  • PAT Basic 1034. 有理数四则运算
    PATBasic1034.有理数四则运算1.题目描述:本题要求编写程序,计算2个有理数的和、差、积、商。2.输入格式:输入在一行中按照 a1/b1a2/b2 的格式给出两个分数形式......
  • 矩阵运算时⊗和·的区别?
    矩阵运算中,符号表示的是张量积(tensorproduct),而符号张量积()张量积是一种针对矩阵和向量的运算,它可以用来将两个矩阵或向量组合成一个更大的矩阵或向量。具体来说,如果是......
  • 位运算
    一、求十进制n的二进制表示中第k位数字如:n=15=1111    第3210位步骤:(1)先把第k位移到最后一位:n>>k;  (2)看个位是几:x&1;公式  n>>......
  • C++ | 运算符重载
    1.运算符重载1.1基本概念函数重载(函数多态)是指用户能够定义多个名称相同但参数列表不同的函数,旨在使用户能够用同名的函数来完成相同的基本操作,即使这种操作被用于不同......
  • 大数运算(BigInteger)与进制转换
    1前言Java提供了BigInteger(大整数)类和BigDecimal(大浮点数)类用于大数运算,这两个类都继承自Number类(抽象类)。由于BigInteger在大数运算中更常见,本博客只介绍BigInt......
  • Python中矩阵运算(基于numpy包)
    1乘法在数组中,a*a计算对应元素相乘(矩阵点乘);在矩阵中,A*A计算矩阵乘法np.multiply()计算对应元素相乘(矩阵点乘)np.dot()计算矩阵乘法importnumpyasnpa=np.array(......
  • tensorflow中高维数组乘法运算
    1前言声明:本博客里的数组乘法运算是指矩阵乘法运算,不是对应元素相乘。在线性代数或高等代数中,我们学习了矩阵乘法,那么,什么样的高维数组才能相乘?tensorflow又是如何定义......
  • python中两个不同shape的数组间运算规则
    1前言声明:本博客讨论的数组间运算是指四则运算,如:a+b、a-b、a*b、a/b,不包括a.dot(b)等运算,由于numpy和tensorflow中都遵循相同的规则,本博客以numpy为例。众所周......
  • BigDecimal一定不会丢失精度吗?
    Java中float的精度为6-7位有效数字。double的精度为15-16位。我们在使用BigDecimal时,使用它的BigDecimal(String)构造器创建对象才有意义。其他的如BigDecimalb=new......