您的位置 首页 java

在Java中涉及到交易和金融货币的时候为什么不能用double、float

在Java中涉及到交易和金融货币的时候为什么不能用double、float来计算?在日常使用中double、float的浮点计算经常会出现一些意外的情况,因为 二进制 不能精确的表示大部分十进制的小数,今天就来讨论一下如何正确的在Java中进行小数计算。

先看案例

我们定义两个 float 变量,一个是1.0-0.9,我们预期是0.1;另一个是0.9-0.8,我们预期也是0.1,然后我们对这两个数进行打印和比较:

在Java中涉及到交易和金融货币的时候为什么不能用double、float

运行结果是:

在Java中涉及到交易和金融货币的时候为什么不能用double、float

在Java中涉及到交易和金融货币的时候为什么不能用double、float

是不是超出了你的预期?在二进制的世界里小数不能很好的被表示,因为十进制小数在与二进制转换的时候会运行除法,而除法有的是除不尽的,这就造成了精度损失。

使用BigDecimal解决

java中提供了BigDecimal这个超大的类,用来存储浮点型,使用它可以处理二进制误差问题。我们使用BigDecimal改造上面的运算逻辑:

运行结果是:

使用BigDecimal的注意点

由于精度损失问题,使用new BigDecimal()的时候,我们只能使用参数为String的构造函数,也可以使用 BigDecimal.valueOf() 的方式,因为BigDecimal.valueOf()里面调用了Double. toString ()方法,根据double实际表达能力对尾数进行了截断,我们可以查看一下JDK里面的源代码:

文章来源:智云一二三科技

文章标题:在Java中涉及到交易和金融货币的时候为什么不能用double、float

文章地址:https://www.zhihuclub.com/190706.shtml

关于作者: 智云科技

热门文章

网站地图