针对Float和double类型数据,有时候我们需要只保留小数位后几位,这时候应该怎样做呢?个人总结了网上的一些精确小数位的方法,本人使用第二种方法实现价格保留两位小数。
三种方法:
方法1:使用BigDecimal格式化数据
float f = 34.232323;
BigDecimal b = new BigDecimal(f);
float f1 =b.setScale(2,BigDecimal.ROUND_HALF_UP).floatValue();
//b.setScale(2,BigDecimal.ROUND_HALF_UP) 表明四舍五入,保留两位小数
方法2:使用DecimalForma类格式化
float scale = 34.236323;
DecimalFormat fnum = newDecimalFormat("##0.00");//或###,###.##
String dd=fnum.format(scale);
System.out.println(dd);
来自 <http://blog.sina.com.cn/s/blog_7d3b7ce50101dzad.html>
方法3:使用NumberFormat类格式化
importjava.text.*;
importjava.util.*;
publicclass NumFormat2 {
publicstatic final double data[] = {
0, 1, 22d/7, 100.2345678
};
publicstatic void main(String av[]) {
NumberFormat form =NumberFormat.getInstance( );
// Set it to look like 999.99[99]
form.setMinimumIntegerDigits(3); //整数位最少位数
form.setMinimumFractionDigits(2);// 小数位最少位数
form.setMaximumFractionDigits(4);// 小数位最多位数
for (int i=0; i<data.length; i++)
System.out.println(data + "\tformats as " +form.format(data));
}
}
输出:
$ java NumFormat2
0.0 formats as000.00
1.0 formats as001.00
3.142857142857143formats as 003.1429
100.2345678 formatsas 100.2346