Java保留指定位小数的几种操作
程序员文章站
2022-07-15 09:35:22
...
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