Java指定されたビット数を保持するいくつかの操作

3530 ワード



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