用Math.round()或BigDecimal 保存两位小数 效率为什么会很低很低呢?

xling 2011-07-18 10:08:53
程序中想对数组中一元素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;

发现程序跑的非常慢,请教大虾们这是什么原因呢?
...全文
969 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xling 2011-07-26
  • 打赏
  • 举报
回复
结贴了,感谢大家的帮助!
疯狂的驴子 2011-07-20
  • 打赏
  • 举报
回复
来看看。
yuxinling00 2011-07-20
  • 打赏
  • 举报
回复
BigDecimal 是一个让我非常头晕的。。。
  • 打赏
  • 举报
回复
Math.round 的速度会很慢?不可能吧?
xling 2011-07-19
  • 打赏
  • 举报
回复
谢谢楼上指点!
用了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]));

不做小数点处理很快,加上处理后就非常慢
liboofsc 2011-07-19
  • 打赏
  • 举报
回复
楼主可以试下用java.text.NumberFormat
xling 2011-07-19
  • 打赏
  • 举报
回复
多谢大家!
大家用Math.round也很慢吗?
还是都是自己写的哦。。。
JavaMan_KA 2011-07-19
  • 打赏
  • 举报
回复
恩,BigDecimal适合高精度的数据,你为使用四舍五入而用它,代价实在有点儿高。
cstur4 2011-07-19
  • 打赏
  • 举报
回复
首先,把表示范围较小的数转换成较大的有意义么?其次,四舍五入你可以自己写,为了使用四舍五入而把float转换成BigDecimal代价太昂贵了。
daijope 2011-07-18
  • 打赏
  • 举报
回复
BigDecimal这个不太健康啊,感觉。
iis81365341 2011-07-18
  • 打赏
  • 举报
回复
如果程序中能使用double就别使用BigDecimal;BigDecimal适合高精度的大(非常大)数据,效率当然不会高了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧