java⾦额⽐较⼤⼩_JAVA中精确计算⾦额BigDecimal packagecom.chauvet.utils;importjava.math.NumberFormat;/***
*
* ⾦额
*
* 如果需要精确计算,必须⽤String来够造BigDecimal! !!
*
* Java⾥⾯的商业计算,不能⽤float和double,因为他们⽆法 进⾏精确计算。
bigdecimal格式化两位小数* 但是Java的设计者给编程⼈员提供了⼀个很有⽤的类BigDecimal,
* 他可以完善float和double类⽆法进⾏精确计算的缺憾。
* BigDecimal类位于java.maths类包下。
* 它的构造函数很多,最常⽤的:
* BigDecimal(double val)
* BigDecimal(String str)
* BigDecimal(BigInteger val)
* BigDecimal(BigInteger unscaledVal, int scale)
*
*@authorwxw
**/
public classAmountUtil {/***
* 保留2位⼩数
* 四舍五⼊
*@parama
*
*@return* 返回⼀个double类型的2位⼩数*/
public static Double get2Double(Double doubleVal,intscale){if(null ==doubleVal){
doubleVal= new Double(0);
}return newBigDecimal(doubleVal).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}/***
* 格式化Double类型并保留scale位⼩数
* 四舍五⼊
*@paramdoubleVal
*@paramscale
* scale必须为⼤于0的正整数,不能等于0
*@return
*/
public static String formatBy2Scale(Double doubleVal,intscale){if(null ==doubleVal){
doubleVal= new Double(0);
}
StringBuffer sbStr= new StringBuffer("0.");for (int i = 0; i < scale; i++) {
sbStr.append("0");
}
DecimalFormat myformat= String());returnmyformat.format(doubleVal);
}/***
* Double类型相加 +
* ROUND_HALF_UP 四舍五⼊
*@paramval1
*
*@paramval2
*
*@paramscale
* 保留scale位⼩数
*@return
*/
public static Double add(Double val1,Double val2,intscale){if(null ==val1){
val1= new Double(0);
}if(null ==val2){
val2= new Double(0);
}return new String(val1)).add(String(val2))).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}/***
* Double类型相减 —
* ROUND_HALF_UP 四舍五⼊
*@paramval1
*
*@paramval2
*
*@paramscale
* 保留scale位⼩数
*@return
*/
public static Double subtract(Double val1,Double val2,intscale){if(null ==val1){
val1= new Double(0);
}if(null ==val2){
val2= new Double(0);
}return new String(val1)).subtract(String(val2))).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}/***
* Double类型相乘 *
* ROUND_HALF_UP 四舍五⼊
*@paramval1
*
*@paramval2
*
*@paramscale
* 保留scale位⼩数
*@return
*/
public static Double multiply(Double val1,Double val2,intscale){if(null ==val1){
val1= new Double(0);
}if(null ==val2){
val2= new Double(0);
}return new String(val1)).multiply(String(val2))).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}/***
* Double类型相除 /
* ROUND_HALF_UP 四舍五⼊
*@paramval1
*
*@paramval2
*
*@paramscale
* 保留scale位⼩数
*@return
*/
public static Double divide(Double val1,Double val2,intscale){if(null ==val1){
val1= new Double(0);
}if(null == val2 || val2 == 0){
val2= new Double(1);
}return new String(val1)).divide(String(val2))).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}/***
* Double类型取余 %
* ROUND_HALF_UP 四舍五⼊
*@paramval1
*
*@paramval2
*
*@paramscale
* 保留scale位⼩数
*@return
*/
public static int divideAndRemainder(Double val1,Double val2,intscale){if(null ==val1){
val1= new Double(0);
}if(null == val2 || val2 == 0){
val2= new Double(1);
}return new String(val1)).divideAndRemainder(new String(val2))) [1].setScale(scale, BigDecimal.ROUND_HALF_UP).intValue();
}/***
* 格式化Double类型数据
*
*@paramval
*@paramfmt
* NumberFormat currency = CurrencyInstance(); //建⽴货币格式化引⽤
* NumberFormat percent = PercentInstance(); //建⽴百分⽐格式化引⽤
*@parammaximumFractionDigits
* 如果是百分⽐ 设置⼩数位数(四舍五⼊)
*@return
*/
public static String formatByNumberFormat(Double val,NumberFormat fmt,intmaximumFractionDigits)
{if(fmt.PercentInstance())){
fmt.setMaximumFractionDigits(maximumFractionDigits);//百分⽐⼩数点最多3位
}returnfmt.format(val);
}/***
* ⽐较⼤⼩
* -1、0、1,即左边⽐右边数⼤,返回1,相等返回0,⽐右边⼩返回-1。
*@paramdoubleVal
*@return
*/
public static intcompareTo(Double val1,Double val2){if(null ==val1){
val1= new Double(0);
}if(null ==val2){
val2= new Double(0);
}return new BigDecimal(val1)pareTo(newBigDecimal(val2));
}public static voidmain(String[] args)
{//System.out.2Double(null,3));//System.out.println(AmountUtil.add(12.2155,
null,4));//System.out.println(AmountUtil.subtract(12.2155, 1D,2));//System.out.println(AmountUtil.multiply(12.2155,
2D,2));//System.out.println(AmountUtil.divide(44.13, 2D,2));//System.out.println(AmountUtil.divideAndRemainder(43D, 8D,0));//System.out.println(AmountUtil.formatByNumberFormat(0.123456,
System.out.println(df.format(12.1233)); //8-->1234567.89‰
df= new DecimalFormat("0,000.0#");//在数字中添加逗号
System.out.println(df.format(123456789.12345)); //5-->-1,234.57
df= new DecimalFormat("0");//不保留⼩数点 四舍五⼊
System.out.println(df.format(123456789.9876)); //5-->-1,234.57
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。