前几天在先笔试的时候遇到一个保留两位小数点的问题,算法很简单,但是保留小数却不知道怎么写,所以在此记录一下。
Java中小数保留有很多种写法,在网上找到了几种比较常用的方法。
1、String.format()
这种方法应该是最好记的,把浮点数转化为字符串。
static double d=3.1415926;
/*
* 方法一:
* String.format
*/
static void f1(){
System.out.println("f1:");
System.out.println(String.format("%.2f", d));
System.out.println(String.format("%.3f", d));
System.out.println(String.format("%.4f", d));
System.out.println(String.format("%.5f", d));
}
输出结果:
f1:
3.14
3.142
3.1416
3.14159
2、DecimalFormat
DecimalFormat 是java.text包中 NumberFormat 的一个具体子类,用于格式化十进制数字。
DecimalFormat 包含一个模式 和一组符号
符号含义:
0 一个数字
# 一个数字,不包括 0
- 缺省负数前缀。
. 小数的分隔符的占位符
, 分组分隔符的占位符
; 分隔格式。
% 乘以 100 和作为百分比显示
? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用
国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代
替十进制分隔符。
X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
例子:
DecimalFormat df1 = new DecimalFormat("0.0");
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df3 = new DecimalFormat("000.000");
DecimalFormat df4 = new DecimalFormat("###.###");
System.out.println(df1.format(12.34));
System.out.println(df2.format(12.34));
System.out.println(df3.format(12.34));
System.out.println(df4.format(12.34));
结果:
12.3
12.3
012.340
12.34
3、BigDecimal
System.out.println("f3:");
BigDecimal bd=new BigDecimal(d);
double d1=bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
double d2=bd.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
double d3=bd.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
输出结果:
f3:
3.14
3.142
3.1416
4、NumberFormat
System.out.println("f4:");
NumberFormat nf=NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(d));
输出结果:
f4:
3.14
完整代码:
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class Format {
static double d=3.1415926;
/*
* 方法一:
* String.format
*/
static void f1(){
System.out.println("f1:");
System.out.println(String.format("%.2f", d));
System.out.println(String.format("%.3f", d));
System.out.println(String.format("%.4f", d));
System.out.println(String.format("%.5f", d));
}
/*
* 方法二:
* DecimalFormat
*/
static void f2(){
System.out.println("f2:");
DecimalFormat df1=new DecimalFormat("#.00");
DecimalFormat df2=new DecimalFormat("0.00");
DecimalFormat df3=new DecimalFormat("00.00");
DecimalFormat df4=new DecimalFormat("##.#");
DecimalFormat df5=new DecimalFormat("0.0%");
System.out.println(df1.format(d));
System.out.println(df2.format(d));
System.out.println(df3.format(d));
System.out.println(df4.format(d));
System.out.println(df5.format(d));
}
/*
* 方法三:
* BigDecimal
*/
static void f3(){
System.out.println("f3:");
BigDecimal bd=new BigDecimal(d);
double d1=bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
double d2=bd.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
double d3=bd.setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
}
/*
* 方法四:
* NumberFormat
*/
static void f4(){
System.out.println("f4:");
NumberFormat nf=NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(d));
}
public static void main(String[] args) {
f1();
f2();
f3();
f4();
}
}