如何在java中利用BigDecimal计算货币金额

  介绍

今天就跟大家聊聊有关如何在java中利用BigDecimal计算货币金额,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

浮点数和双精度数只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math。BigDecimal。

而且使用BigDecimal类也可以进行大数的操作。

方法类型描述公共BigDecimal(双val)构造将双表示形式转换为BigDecimalpublic BigDecimal (int val)构造将int表示形式转换为BigDecimalpublic BigDecimal(字符串val)构造将字符串表示形式转换为BigDecimalpublic BigDecimal添加(BigDecimal被加数)普通加公共BigDecimal减去法(BigDecimal减数)普通减法公共BigDecimal相乘(BigDecimal被乘数)普通乘公共BigDecimal分裂法(BigDecimal除数)普通除法

一、BigDecimal的计算

金额的计算BigDecimal类

double  d =, 9.84;   double  d2 =, 1.22;//注意需要使用BigDecimal (String  val)构造方法   BigDecimal  BigDecimal =, new  BigDecimal (Double.toString (d));   BigDecimal  bigDecimal2 =, new  BigDecimal (Double.toString (d2));//加法   BigDecimal  bigDecimalAdd =, bigDecimal.add (bigDecimal2);   double  add =, bigDecimalAdd.doubleValue ();//减法   BigDecimal  bigDecimalSubtract =, bigDecimal.subtract (bigDecimal2);   double  subtract =, bigDecimalSubtract.doubleValue ();//乘法   BigDecimal  bigDecimalMultiply =, bigDecimal.multiply (bigDecimal2);   double  multiply =, bigDecimalMultiply.doubleValue ();//除法   int  scale =, 2;//保留2位小数   BigDecimal  bigDecimalDivide =, bigDecimal.divide (bigDecimal2,,,, BigDecimal.ROUND_HALF_UP);   double  divide =, bigDecimalDivide.doubleValue ();//格式化   double  format =, 12343171.6;//获取常规数值格式   NumberFormat  number =, NumberFormat.getNumberInstance ();   String  str =, number.format(格式);//12343171。6//获取整数数值格式   NumberFormat  integer =,其中();   时间=str  integer.format(格式);//如果带小数会四舍五入到整数12343172//获取货币数值格式   NumberFormat  currency =, NumberFormat.getCurrencyInstance ();   currency.setMinimumFractionDigits(2);//设置数的小数部分所允许的最小位数(如果不足后面补0)   currency.setMaximumFractionDigits(4);//设置数的小数部分所允许的最大位数(如果超过会四舍五入)   时间=str  currency.format(格式);//¥12343171 .60//获取显示百分比的格式   NumberFormat  percent =, NumberFormat.getPercentInstance ();   percent.setMinimumFractionDigits(2);//设置数的小数部分所允许的最小位数(如果不足后面补0)   percent.setMaximumFractionDigits(3);//设置数的小数部分所允许的最大位数(如果超过会四舍五入)   时间=str  percent.format(格式);//1234317160 .00%

二、典型的两类型的数值运算

/* *   ,*双的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型   ,*整型地方法适合于货币精度已知的情况,比如12.11 + 1.10转成1211 + 110计算,最后再/100即可   ,*以下是摘抄的BigDecimal方法:   ,*/public  class  DoubleUtil  implements  Serializable  {   ,private  static  final  long  serialVersionUID =, -3345205828566485102 l;   ,//默认除法运算精度   ,private  static  final  Integer  DEF_DIV_SCALE =, 2;/* *   *,才能提供精确的加法运算。   ,*   *,才能@param  value1 被加数   *,才能@param  value2 加数   *,才能@return 两个参数的和   ,*/,public  static  Double 添加(Double  value1, Double  value2), {   BigDecimal 才能;b1 =, new  BigDecimal (Double.toString (value1));   BigDecimal 才能;b2 =, new  BigDecimal (Double.toString (value2));   return 才能b1.add (b2) .doubleValue ();   ,}/* *   *,才能提供精确的减法运算。   ,*   *,才能@param  value1 被减数   *,才能@param  value2 减数   *,才能@return 两个参数的差   ,*/,public  static  double 子(double  value1, double  value2), {   BigDecimal 才能;b1 =, new  BigDecimal (Double.toString (value1));   BigDecimal 才能;b2 =, new  BigDecimal (Double.toString (value2));   return 才能b1.subtract (b2) .doubleValue ();   ,}/* *   *,才能提供精确的乘法运算。   ,*   *,才能@param  value1 被乘数   *,才能@param  value2 乘数   *,才能@return 两个参数的积   ,*/,public  static  Double  mul (Double  value1, Double  value2), {   BigDecimal 才能;b1 =, new  BigDecimal (Double.toString (value1));   BigDecimal 才能;b2 =, new  BigDecimal (Double.toString (value2));   return 才能b1.multiply (b2) .doubleValue ();   ,}/* *   *,才能提供(相)对精确的除法运算,当发生除不尽的情况时,,精确到小数点以后10位,以后的数字四舍五入。   ,*   *,才能@param  dividend 被除数   *,才能@param  divisor 除数   *,才能@return 两个参数的商   ,*/,public  static  Double 分裂(Double 股利,Double 因子),{   return 才能;分裂(除数,股息,还以为;DEF_DIV_SCALE);   ,}/* *   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在java中利用BigDecimal计算货币金额