在金融计算中,必须要使用BigDecimal,double和float都不适合。因为单单一个精度问题就能把人整晕了
我记得有一次,我碰巧要计算一个表达式a - b
,a的值为2,b的值为1.1,我侄女五岁半都知道答案应该是0.9,结果程序算出来的结果竟然是0.89999…,我当时又气又激动,气的是计算机还没有我侄女靠谱
首先,计算机进行的是二进制运算,我们输入的十进制数字会先转换成二进制,进行运算后再转换为十进制输出。double和float提供了快速的运算,然而问题在于转换为二进制的时候,有些数字不能完全转换,只能无限接近于原本的值,这就导致了你看到的不正确的结果
BigDecimal可以表示任意精度的小数,并对它们进行计算。但要小心使用 BigDecimal(double)
构造函数,因为它会在计算的过程中产生舍入误差。最好要使用基于整数或 String 的构造函数来创建BigDecimal对象
那我们来看下一个问题。你应该知道2 / 0
的时候程序会报java.lang.ArithmeticException
的错误,那么你知道2.0 / 0
的结果吗?
这个问题难不倒我。结果是Infinity(英菲尼迪),不好意思,我的英语口语能力有限啊。其实就是无穷的意思。不仅有正无穷大,还有负无穷大,甚至还有一个叫做NaN的特殊值。NaN代表‘不是一个数字’。这些值的存在是为了在出现错误条件时,程序还可以用特定的值来表示所产生的结果。这些错误的情况包括算术溢出、给负数开平方根,还有您说的除以 0 等
最好,变量声明的地方要离第一次使用的地方近。否则的话,代码阅读起来会很困难,因为人眼睛接受的屏幕高度是有限的
Java面试官:兄弟,你确定double精度比float低吗?
最新推荐文章于 2024-04-18 21:56:07 发布