apzl_leasing/src_app/com/amarsoft/aims/util/NumberAssistant.java
2018-06-03 22:26:41 +08:00

198 lines
4.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}