package com.amarsoft.aims.util; import java.math.BigDecimal; import java.text.DecimalFormat; import com.amarsoft.are.lang.StringX; import com.amarsoft.are.util.Arith; /** * 数学数字辅助处理类
* 该类来源于宁波项目组,原作者王慧
* 在宁波的基础上,根据安硕信贷系统开发编码规则对代码及注释进行了规范化处理 * @author syang * @since 2013-12-27 * */ public class NumberAssistant { /** * 判断一个数字型变量是否是整数。如:double d1=3.00;此时,d1为整数 * @param originalSum 数字型变量 * @return */ public static boolean isNumeric(double originalSum){ Double numObj =new Double(originalSum); return numObj.intValue()==originalSum; } /** * 保留6位有效数字 * @param originalSum * @return */ public static double keepSixDecimalFraction(double originalSum){ return Double.parseDouble(new DecimalFormat("0.000000").format(originalSum)); } /** * 保留7位有效数字 * @param originalSum 数字型变量 * @return */ public static double keepSevenDecimalFraction(double originalSum){ return Double.parseDouble(new DecimalFormat("0.0000000").format(originalSum)); } /** * 保留6位有效数字 * @param originalSum 数字型变量 * @param roud 是否在第七位是否四舍五入 * @return */ public static double keepSixDecimalFraction(double originalSum,boolean roud){ if(roud){ return keepSixDecimalFraction(originalSum); }else{ return Double.parseDouble((new DecimalFormat("0.0000000").format(originalSum)).substring(0,8)); } } /** * 保留2位有效数字 * @param originalSum 数字型变量 * @return */ public static double keepTwoDecimalFraction(double originalSum){ return Double.parseDouble(new DecimalFormat("0.00").format(originalSum)); } /** * 保留2位有效数字,三位一逗,不转换为科学计数法 * @param originalSum 数字型变量 * @return */ public static String keepTwoDecimalFormat(double originalSum){ DecimalFormat d = new DecimalFormat("###,##0.00"); return d.format(originalSum); } /** * 加法运算 * @param d1 * @param d2 * @return */ public static double add(double d1, double d2) { BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.add(b2).doubleValue(); } /** * 减法运算 * @param d1 * @param d2 * @return */ public static double subtract(double d1, double d2) { BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.subtract(b2).doubleValue(); } /** * 乘法运算 * @param d1 * @param d2 * @return */ public static double multiply(double d1, double d2) { BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.multiply(b2).doubleValue(); } /** * 除法运算 * @param d1 * @param d2 * @return */ public static double divided(double d1, double d2) { BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.divide(b2, 10, BigDecimal.ROUND_HALF_DOWN).doubleValue(); } /** * 判断两个数字是否相等 * @param d1 * @param d2 * @return */ public static boolean equals(double d1,double d2){ return equals(d1,d2,0.01); } /** * 判断两个数字是否相等 * @param d1 * @param d2 * @param scale * @return */ public static boolean equals(double d1,double d2,double scale){ return NumberAssistant.subtract(d1, d2)<=scale; } /** * 判断大于关系 * @param d1 * @param d2 * @return */ public static boolean moreThan(double d1, double d2){ return NumberAssistant.moreThan(d1, d2, 0.01); } /** * 判断大于关系 * @param d1 * @param d2 * @param scale * @return */ public static boolean moreThan(double d1, double d2, double scale){ if(NumberAssistant.equals(d1, d2, scale)){ return false; }else{ return d1 > d2; } } /** * 金额单位型的转换,如果单位是万元则数据乘以一万,等等 * @param unitText 单位类型 %,万,亿等等 * @param valueType 1表示除(一般用在显示时处理),2表示乘(一般用在页面存入数据库时处理) * @param value 需转换的数据 */ public static double doubleValueConvert(String unitText,int valueType,double value){ double returnValue = value; if(!StringX.isEmpty(unitText)){ if(unitText.indexOf("%")>=0){ if(valueType==2) returnValue = Arith.div(value, 100); else if(valueType==1) returnValue = Arith.mul(value, 100); } if(unitText.indexOf("万")>=0){ if(valueType==1) returnValue = Arith.div(value, 10000); else if(valueType==2) returnValue = Arith.mul(value, 10000); } if(unitText.indexOf("亿")>=0){ if(valueType==1) returnValue = Arith.div(value, 100000000); else if(valueType==2) returnValue = Arith.mul(value, 100000000); } } return returnValue; } }