为了账号安全,请及时绑定邮箱和手机立即绑定

Java中double相减为什么会出现不精确的现象?

Java中double相减为什么会出现不精确的现象?

holdtom 2019-03-13 18:15:01
double s = 5.3;double s1 = 4.2;System.out.println(s-s1);输出1.0999999999999996
查看完整描述

5 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

Java中使用BigDecimal进行浮点数精确计算


查看完整回答
反对 回复 2019-04-18
?
守着一只汪

TA贡献1872条经验 获得超3个赞

谢邀!为什么丢失精度我也说不清,但是怎么解决我是知道的,建议在计算时先把 double 等类型转为 String 再放到 java.math.BigDecimal 中去进行计算,在计算的时候要使用 java.math.BigDecimal自带的运算方法,比如 add() ,divide()。。等等,计算后也会返回一个 BigDecimal 的对象,然后再使用 doubleValue(), intValue() 等方法转为基本数据类型。

查看完整回答
反对 回复 2019-04-18
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

因为计算机算术是二进制的。

十进制的0.1变成二进制是无限循环小数,肯定得截断。

对10进制货币的加减,可以用BigDecimal类型(有的语言叫Decimal)避免截断误差。

也可以自己定义一个数字类,像matlab做的那样。

错误和误差是两回事,最末尾的那点区别,大部分情况都没关系吧。

举个例子:用双精度浮点数计算地球周长,截断误差在0.000001毫米数量级,有关系么?


查看完整回答
反对 回复 2019-04-18
  • 5 回答
  • 0 关注
  • 1552 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信