社区
Java
帖子详情
计算股票的总金额,使用了double类型计算出的金额有时会出现问题,如下为什么呢?
qq_30767067
2018-09-30 10:56:24
如题,以下所有数据包括单价、总的数量、总金额都是设置为double类型。 发现有一次单价price是3.34,总的数量是94400,计算出的总金额居然是315295.9919,而不是315296。。。这个问题不是每次都发生,有时候会出现。请问是什么原因呢?
...全文
1474
8
打赏
收藏
计算股票的总金额,使用了double类型计算出的金额有时会出现问题,如下为什么呢?
如题,以下所有数据包括单价、总的数量、总金额都是设置为double类型。 发现有一次单价price是3.34,总的数量是94400,计算出的总金额居然是315295.9919,而不是315296。。。这个问题不是每次都发生,有时候会出现。请问是什么原因呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
Java
使用
double
计算
金额
精度丢失
问题
以及JavaScript浮点数
计算
精度丢失
问题
解决办法
一、在
使用
Java中
使用
double做为单价
计算
金额
的时候
会
出
现
精度丢失的
问题
。 解决办法 :
使用
大数据运算类 ---> BigDecimal类。具体看下面代码 //
计算
金额
//转型防止丢失精度 BigDecimal bigDecimalPrice = new BigDecimal(String.valueOf(goods_price)); BigDecimal bigDecimalTotal = new BigDecimal(goo
Java 中double和float类型
计算
丢失精度
问题
总结
背景
问题
发生在某天中午,当我订单付完款后,不想要了就点击了全额退款,但是给我的提示确实 “您输入的
金额
不正确”,我就纳闷了,为什么不能退?看了下代码,然后就发现了
问题
... 1、bigdecimal 转换成小数
计算
有误差 真实项目中校验退款
金额
是否超过订单实付款
金额
代码如下截图: 模拟以上的代码截图如下: float和double做四则运算误差 public stat...
【Java实战系列】「技术盲区」Double与Float的坑与解决办法以及BigDecimal的取而代之
double和float类型主要用于科学
计算
与工程
计算
而设计的,用于二进制浮点
计算
,但我们在程序中写的时候往往都是写的10进制,而这个10进制的小数,对于
计算
机内部而言,是无法用二进制的小数来精确表达
出
来的,只能表示
出
一个“不精确性”或者说“近似性”的结果,而用这个近似性的结果进行
计算
得
出
的数据, 也往往与我们心中想要的数据不一样,所以如果是想进行
金额
或其他类似的浮点型数值
计算
,不要
使用
double或float,推荐大家
使用
BigDecimal来进行运算。
BigDecimal应用——
计算
费用场景中用到Integer,Double,BigDecimal三种类型
出
现
的意外情况 & 结合BigDecimal源码分析
1.在new bigdecimal的时候,最好传入的是字符串; 2.
double类型
在
计算
费用的场景中尽量不要用,
会
有意想不到的结果; 3.有时候用一下BigDecimal.valueOf方法是个不错的选择;
如果需要精确的答案,请避免
使用
float和double
float和double主要为了科学
计算
和工程
计算
而设计,执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似
计算
而精心设计的。然而,它们没有提供完全精确的结果,所以不适合用于需要精确结果的场合,尤其是货币
计算
。
Java
51,410
社区成员
85,981
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章