67,513
社区成员
发帖
与我相关
我的任务
分享
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));
// 第二种:
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("0.00");
//df2.setRoundingMode(RoundingMode.HALF_UP);
System.out.println("第五种="+df2.format(d));
System.out.println("-------------------------风骚的java分割线---------------------------");
}
}
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
-------------------------风骚的java分割线---------------------------
测试2 = 3.0
第一种=3
第二种=3.00
第三种=3.0
第四种=3.0
第五种=3.00
-------------------------风骚的java分割线---------------------------
测试3 = 0.4567
第一种=0.46
第二种=0.46
第三种=0.46
第四种=0.0
第五种=0.00
-------------------------风骚的java分割线---------------------------
测试4 = 2343.333
第一种=2343.33
第二种=2343.33
第三种=2343.33
第四种=2343.0
第五种=2343.00
-------------------------风骚的java分割线---------------------------
测试5 = 133.0
第一种=133
第二种=133.00
第三种=133.0
第四种=133.0
第五种=133.00
-------------------------风骚的java分割线---------------------------
测试6 = 3.1415
第一种=3.14
第二种=3.14
第三种=3.14
第四种=3.0
第五种=3.00
-------------------------风骚的java分割线---------------------------
总结:个人感觉,如果整数就不保留小数的话第一种比较好,如果任何情况都保留两位小数的话,第二种比较好。
第一种:
java.text.DecimalFormat df=new java.text.DecimalFormat("#.##");
double d=3.14159;
System.out.println(df.format(d));
第二种:
java.math.BigDecimal
BigDecimal bd = new BigDecimal("3.14159265");
bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);
第三种:
long l = Math.round(3.14159*100); //四舍五入
double ret = l/100.0; //注意:使用 100.0 而不是 100
第四种:
double d = 13.4324;
d=((int)(d*100))/100;
http://blog.163.com/zicod_x/blog/static/8338796620091117114618541/手动转换吧:乘以100,再取整。。