198 lines
4.8 KiB
Java
198 lines
4.8 KiB
Java
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;
|
||
|
||
/**
|
||
* 数学数字辅助处理类<br/>
|
||
* 该类来源于宁波项目组,原作者王慧<br/>
|
||
* 在宁波的基础上,根据安硕信贷系统开发编码规则对代码及注释进行了规范化处理
|
||
* @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;
|
||
}
|
||
}
|