程序中想对数组中一元素p[j]进行四舍五入保留小数点后两位的操作,用:
float a = (float)(nodeDegree[j])/sumOfDegree;
BigDecimal b = new BigDecimal((double)a);
p[j] = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();和
p[j] = (float)Math.round(((float)(nodeDegree[j])/sumOfDegree)*100)/100;发现程序跑的非常慢,请教大虾们这是什么原因呢?

解决方案 »

  1.   

    如果程序中能使用double就别使用BigDecimal;BigDecimal适合高精度的大(非常大)数据,效率当然不会高了。
      

  2.   

    BigDecimal这个不太健康啊,感觉。
      

  3.   

    首先,把表示范围较小的数转换成较大的有意义么?其次,四舍五入你可以自己写,为了使用四舍五入而把float转换成BigDecimal代价太昂贵了。
      

  4.   

    恩,BigDecimal适合高精度的数据,你为使用四舍五入而用它,代价实在有点儿高。
      

  5.   

    多谢大家!
    大家用Math.round也很慢吗?
    还是都是自己写的哦
      

  6.   

    楼主可以试下用java.text.NumberFormat
      

  7.   

    谢谢楼上指点!
    用了NumberFormat:(程序定义p[j]为float)p[j]=(float)(nodeDegree[j])/sumOfDegree*1f;NumberFormat nf = NumberFormat.getNumberInstance();
    nf.setMaximumFractionDigits(2);
    p[j]=Float.parseFloat(nf.format((double)p[j])); 不做小数点处理很快,加上处理后就非常慢
      

  8.   

    Math.round 的速度会很慢?不可能吧?
      

  9.   

    BigDecimal 是一个让我非常头晕的