double类型可以保留几位小数?
下面是五种处理方法,使double类型的数据保留2位小数。
/*具体代码*/
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
public class Test {
double[] num = {3.4567, 3, 0.4567, 2343.333, 133, 3.1415};
public void func() {
int i = 1;
for(double d:num){
System.out.println("测试"+(i++)+" = "+d);
String dstr = String.valueOf(d);
// 第一种:
java.text.DecimalFormat df = new java.text.DecimalFormat("#.##");
System.out.println("第一种="+df.format(d));
// 第二种:通过下面的结果可以看出,一二两种都可以,第一种如果小数部分是0的话就只显示整数,第二种始终显示两位小数
BigDecimal bd = new BigDecimal(dstr);
bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("第二种="+bd);
// 第三种:
long l = Math.round(d * 100); // 四舍五入
double ret = l / 100.0; // 注意:使用 100.0 而不是 100
System.out.println("第三种="+ret);
// 第四种:
d = ((int) (d * 100)) / 100;
System.out.println("第四种="+d);
//第五种
DecimalFormat df2 = new DecimalFormat("#.00");
//df2.setRoundingMode(RoundingMode.HALF_UP);
System.out.println("第五种="+df2.format(d));
System.out.println("-------------------------");
}
}
public static void main(String[] args) {
Test t = new Test();
t.func();
}
}
运行结果:
测试1 = 3.4567
第一种=3.46
第二种=3.46
第三种=3.46
第四种=3.0
第五种=3.00
-------------------------
测试2 = 3.0
第一种=3
第二种=3.00
第三种=3.0
第四种=3.0
第五种=3.00
-------------------------
测试3 = 0.4567
第一种=0.46
第二种=0.46
第三种=0.46
第四种=0.0
第五种=.00
-------------------------
测试4 = 2343.333
第一种=2343.33
第二种=2343.33
第三种=2343.33
第四种=2343.0
第五种=2343.00
-------------------------
测试5 = 133.0
第一种=133
第二种=133.00
第三种=133.0
第四种=133.0
第五种=133.00
-------------------------
测试6 = 3.1415
第一种=3.14
第二种=3.14
第三种=3.14
第四种=3.0
第五种=3.00
-------------------------