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

解决方案 »

  1.   

    你会C语言的printf吗?用java.util.Formatter类试试.
      

  2.   

    public static void main(String[] args) {
      double b = 12.939;
      System.out.println(round(b));     
      System.out.println(round(b, 2));
    }/**
     * 保留多位小数
     * @param num
     * @param digital
     * @return
     */
    public static double round(double num, int digital) {
      long n = 1;
      for(int i=0; i<digital; i++){
        n *= 10;
      }
      return Math.round(num*n) / (double)n;
    }/**
     * 保留两位小数
     * @param num
     * @return
     */
    public static double round(double num) {
      return Math.round(num*100) / 100.0;
    }
      

  3.   

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

  4.   

    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);
      

  5.   

    double d=12.989;
    d =Math.ceil(d*100)/100;
    if((d+"").lastIndexOf(".99")!=-1)d = Math.round(d);
    System.out.println(d);