保留小数位数
J2EE中保留小数位数
1、在JSP页面保留小数
导入<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean"%>标签
filter:用来指定是否屏蔽到属性值的HTML格式
property:用来指定name所代表的对象的属性名字
format:用来指定显示的时间,数字,日期等的格式
2、在java代码中保留小数并且要保持精度
DecimalFormat f = new DecimalFormat("#,##0.00");
f.setRoundingMode(RoundingMode.HALF_UP);
3、double类型数据的加、减、乘、除,并且保持精度。
/**
* @ create_date 2011-9-15
* @ author sun_yfei
* @ version 1.0
*/
package com;
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
* @title Arith
* @description float、double类型数据的加、减、乘、除运算。
* @author sun_yfei
* @version
* @create_date 2011-9-15
* @copyright (c) CVIC SE
*
*/
public class Arith {
//除法默认精度
public static final int DEF_DIV_SCALE=10;
/**
* @title main
* @description 测试main
* @author sun_yfei
* @create_date 2011-9-15
* @param args
*/
public static void main(String[] args) {
System.out.println(new
DecimalFormat("###,##0.0000").format(round(2893478927.283289374892758,3)));
System.out.println(round(add(23423.3452345,2345),3));
System.out.println(round(sub(123.1111111,23.1111111),3));
System.out.println(round(mul(100.00000,2.111111111),3));
System.out.println(round(div(9999.9999,100),3));
}
/**
*
* @title add
* @description double类型的加法运算
* @author sun_yfei
* @create_date 2011-9-15
* @param a 被加数
* @param b 加数
* @return 和
*/
public static double add(double a,double b){
BigDecimal bigDecimalA = new BigDecimal(String.valueOf(a));
BigDecimal bigDecimalB = new BigDecimal(String.valueOf(b));
return bigDecimalA.add(bigDecimalB).doubleValue();
}
/**
*
* @title sub
* @description double类型的减法运算
* @author sun_yfei
* @create_date 2011-9-15
* @param a 被减数
* @param b 减数
* @return 差
*/
public static double sub(double a,double b){
BigDecimal bigDecimalA = new BigDecimal(String.valueOf(a));
BigDecimal bigDecimalB = new BigDecimal(String.valueOf(b));
return bigDecimalA.subtract(bigDecimalB).doubleValue();
}
/**
*
* @title mul
* @description double类型的乘法运算
* @author sun_yfei
* @create_date 2011-9-15
* @param a 被乘数
* @param b 乘数
* @return 积
*/
public static double mul(double a,double b){
BigDecimal bigDecimalA = new BigDecimal(String.valueOf(a));
BigDecimal bigDecimalB = new BigDecimal(String.valueOf(b));
return bigDecimalA.multiply(bigDecimalB).doubleValue();
}
/**
*
* @title div
* @description double类型的乘法运算,并保留scale位小数
* @author sun_yfei
* @create_date 2011-9-15
* @param a 被除数
* @param b 除数
* @param scale 保留小数位数
* @return 保留scale位小数后的商
*/
public static double div(double a,double b,int scale){
if(scale<0){
throw new IllegalArgumentException("The scale must be a positive integer or zero!");
}
BigDecimal bigDecimalA = new BigDecimal(String.valueOf(a));
BigDecimal bigDecimalB = new BigDecimal(String.valueOf(b));
return bigDecimalA.divide(bigDecimalB, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
*
* @title div
* @description double类型的乘法运算,默认保留10位小数
* @author sun_yfei
* @create_date 2011-9-15
* @param a 被除数
* @param b 除数
* @return 保留10位小数后的商
*/
public static double div(double a,double b){
return div(a,b,DEF_DIV_SCALE);
}
/**
*
* @title round
* @description 保留scale位小数
* @author sun_yfei
* @create_date 2011-9-15
* @param a 需要保留小数位数的double型数据
* @param scale 需要保留的小数位数
* @return 保留scale位小数后的double型数据
*/
public static double round(double a,int scale){
if(scale<0){
throw new IllegalArgumentException("The scale must be a positive integer or zero!");
}
BigDecimal bigDecimal = new BigDecimal(Double.toString(a));
return bigDecimal.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}