介绍
今天就跟大家聊聊有关如何在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计算货币金额