Java保留指定位小数的几种操作


import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * 获取指定位数的小数工具类<br>
 * 
 * @author mxy(Email:[email protected])
 * 
 */
public class NumberFormat {

	/**
	 * BigDecimal转换最简便,采用四舍五入方式
	 * 
	 * @param num 要转换的数字
	 * @param length 保留几位小数
	 */
	public double formatByBigDecimal(double num, int length) {
		BigDecimal bg = new BigDecimal(num);
		double f1 = bg.setScale(length, BigDecimal.ROUND_HALF_UP).doubleValue();
		// System.out.println("转换后的结果:"+f1);
		return f1;
	}

	/**
	 * DecimalFormat转换最简便,采用四舍五入方式
	 * 
	 * @param num 要转换的数字
	 * @param length 保留几位小数
	 */
	public double formatByDecimalFormat(double num, int length) {
		String foramtStr = "#";
		if (length > 0) {
			foramtStr += ".";
			for (int i = 0; i < length; i++) {
				foramtStr += "0";
			}
		}
		DecimalFormat df = new DecimalFormat(foramtStr);
		// System.out.println("转换后的结果:"+df.format(num));
		return Double.valueOf(df.format(num));
	}

	/**
	 * String.format方式格式化,采用四舍五入方式
	 * 
	 * @param num 要转换的数字
	 * @param length 保留几位小数
	 */
	public double formatByStringFormat(double num, int length) {
		double f = 111231.5585;
		String formatStr = "";
		if (length > 0) {
			formatStr = "%." + length + "f";
		} else {
			formatStr = "%.0f";
		}
		// System.out.println("转换后的结果:"+String.format(formatStr, num));
		return Double.valueOf(String.format(formatStr, num));

	}

	public static void main(String[] args) {
		NumberFormat f = new NumberFormat();
		double num = 111231.558512311234812932134923;
		/* 10位小数 */
		System.out.println(f.formatByBigDecimal(num, 10));
		System.out.println(f.formatByDecimalFormat(num, 10));
		System.out.println(f.formatByStringFormat(num, 10));
		/* 10位小数 */

		System.out.println();

		/* 5位小数 */
		System.out.println(f.formatByBigDecimal(num, 5));
		System.out.println(f.formatByDecimalFormat(num, 5));
		System.out.println(f.formatByStringFormat(num, 5));
		/* 5位小数 */

		System.out.println();

		/* 一位小数 */
		System.out.println(f.formatByBigDecimal(num, 1));
		System.out.println(f.formatByDecimalFormat(num, 1));
		System.out.println(f.formatByStringFormat(num, 1));
		/* 一位小数 */

		System.out.println();

		/* 0位小数 */
		System.out.println(f.formatByBigDecimal(num, 0));
		System.out.println(f.formatByDecimalFormat(num, 0));
		System.out.println(f.formatByStringFormat(num, 0));
		/* 0位小数 */

		System.out.println();

		/*-1位小数*/
		System.out.println(f.formatByBigDecimal(num, -1));
		System.out.println(f.formatByDecimalFormat(num, -1));
		System.out.println(f.formatByStringFormat(num, -1));
		/*-1位小数*/
	}
}



运行结果:
111231.5585123112
111231.5585123112
111231.5585123112

111231.55851
111231.55851
111231.55851

111231.6
111231.6
111231.6

111232.0
111232.0
111232.0

111230.0
111232.0
111232.0

你可能感兴趣的:(Java保留指定位小数的几种操作)