日期:2014-05-20  浏览次数:20927 次

求一个函数
要求将一个Double类型的对象的值四舍五入,保留小数点两位,并且如果最后两位为99的,例如12.99,变为13.00




------解决方案--------------------
bao110908(bao)(bao)(讨厌蟑螂)
=============================
程序有问题,如果是12.99或者是12.993不能满足楼主的要求,这个得到的是12.99
而12.999得到的是13.0
------解决方案--------------------
to: 楼上

如果把 12.993,保留两个小数舍为 13.00 的话,就不符合四舍五入规则了,不知道为什么要这样,不过还是要谢谢你,我没看清问题,改正一下:

/**
* 保留两位小数
* @param num
* @return
*/
public static double round(double num) {
  if(num%1.0 > = 0.99) {
    num = (int)num + 1;
  }
  return Math.round(num*100) / 100.0;
}

另外在数值是 13.00 时,显示的结果为 13.0,这是 double 类型数据的默认显示格式,与 13.00 的值是相等的,只是显示的格式问题。如果要显示为 13.00 的话,需要进行格式化输出:

  System.out.printf( "%.2f%n ", d);
------解决方案--------------------
double d=12.989;
d =Math.ceil(d*100)/100;
if((d+ " ").lastIndexOf( ".99 ")!=-1)d = Math.round(d);
System.out.println(d);