计算股票的总金额,使用了double类型计算出的金额有时会出现问题,如下为什么呢?

qq_30767067 2018-09-30 10:56:24
如题,以下所有数据包括单价、总的数量、总金额都是设置为double类型。 发现有一次单价price是3.34,总的数量是94400,计算出的总金额居然是315295.9919,而不是315296。。。这个问题不是每次都发生,有时候会出现。请问是什么原因呢?
...全文
1474 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ToughPZG 2018-10-03
  • 打赏
  • 举报
回复
要用与数据库类型对应的BigDecimal类精确计算
勇敢的心、 2018-10-02
  • 打赏
  • 举报
回复
double小数位是不确定的, 数据库字段设置为Decimal 例如数据金额字段类型设置为Decimal(19,2)即 长度为19位 其中小数位为2位,这样就限制了该字段 所有数据都为两位小数
verejava 2018-10-01
  • 打赏
  • 举报
回复
Java 常用类库 之 大精度数值 http://www.verejava.com/?id=17159675312132
tongkaiming 2018-09-30
  • 打赏
  • 举报
回复
浮点运算很少是精确的,只要是超过精度能表示的范围就会产生误差。往往产生误差不是因为数的大小,而是因为数的精度。因此,产生的结果接近但不等于想要的结果。尤其在使用float和double作精确运算的时候要特别小心。
可以考虑采用一些替代方案来实现。如通过String结合BigDecimal或者通过使用long类型来转换。

小闹2333 2018-09-30
  • 打赏
  • 举报
回复
使用BigDecimal类计算
初尘19 2018-09-30
  • 打赏
  • 举报
回复
这个和浮点数的存储有关,浮点型数和整型数的存储方式不一样,一般高精度的计算用java.math.BigDecimal类处理
KE1234567890 2018-09-30
  • 打赏
  • 举报
回复
一般使用 java.math.BigDecimal 类来处理需要高精度的计算,浮点数(double,flot)因为精度问题, 容易出现不精确的计算结果
qq_30767067 2018-09-30
  • 打赏
  • 举报
回复

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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