Double.isInfinite(1.0 / 0.0);
返回true。
Double.isInfinite(1.0 / 3.0);
但这没有,根据我的理解,这将是一个无穷大的数字,因为这会将0.33333_返回到无穷大。
为什么?
答案 0 :(得分:11)
Double.isInfinite
不会返回true;如果值本身是无限的(正面或负面),则返回true。
另外,1.0 / 3.0在基数10中是无限长的,但在其他基数中没有,如基数3。
答案 1 :(得分:2)
类型double
只能代表某些分数。表达式1.0 / 3.0的产量不会产生“三分之一”的分数,而是选择double
能够代表的最接近的分数。在double
可以表示的大约18,000,000,000,000,000,000个分数中,最接近三分之一的分数是6004799503160661/18014398509481984,因此表达式1.0/3.0
产生该精确值。当以十进制或二进制格式表示时,实际分数“三分之一”将无限长,而在该词的任何意义上,最接近的double
不是“无限”;即使以十进制格式写出也只需要小数点右边的54位数。
答案 2 :(得分:1)
在IEEE-754(+/-无穷大)中,有两个值定义为infinity
。由于double是浮点数,因此遵循这些规则。但是,如果您要使用任意精度类型(如BigDecimal),您可能能够实现此类测试 - 例如,
public static void main(String[] args) {
BigDecimal ONE = BigDecimal.ONE;
BigDecimal THREE = new BigDecimal("3");
BigDecimal THIRD = ONE.divide(THREE);
System.out.println(THIRD);
}
将抛出异常
线程中的异常" main" java.lang.ArithmeticException:非终止十进制扩展;没有确切的可表示的十进制结果。