java中一个通过除法获得了一个3位小数乘以100后变成了16为小数

李晓东1 2014-02-18 04:10:50

double avarage = percent/cpus.size();
avarage = Math.round(avarage*1000)*1.0/1000;
System.out.println(avarage);
System.out.println(avarage*100.0);​

偶尔出现,
求解释
...全文
323 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
姜小白- 2014-02-19
  • 打赏
  • 举报
回复
引用 2 楼 preferme 的回复:
嗯。正常。二进制和十进制相互转换的时候,会产生数据误差。 (要想保存确定精度的浮点数,用1楼的方法就可以解决问题。) 所以,在金融软件里面,存储货币的时候,都在用整数,单位是分,而不是元。 包括魔兽世界里面,存储货币用的单位也是铜元,而不是金元,或银元。
学习了
冰思雨 2014-02-19
  • 打赏
  • 举报
回复
嗯。正常。二进制和十进制相互转换的时候,会产生数据误差。 (要想保存确定精度的浮点数,用1楼的方法就可以解决问题。) 所以,在金融软件里面,存储货币的时候,都在用整数,单位是分,而不是元。 包括魔兽世界里面,存储货币用的单位也是铜元,而不是金元,或银元。
tony4geek 2014-02-18
  • 打赏
  • 举报
回复
用BigDecimail

62,620

社区成员

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

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