Java中的双精度除以零
可能重复:Java中的双精度除以零,java,divide-by-zero,arithmeticexception,Java,Divide By Zero,Arithmeticexception,可能重复: 为什么Java中的以下语句不会报告算术异常 double d = 1.0/0; 简言之:浮点数可以表示无穷大(甚至可以表示产生非数字值的操作),因此导致无穷大的操作(例如除以0)是有效的 在Mohammod Hossain的回答的基础上进行扩展,并且,当“发生异常算术条件时”抛出算术异常。对于整数,除0就是这种情况,但是对于浮点数(floats和doubles),存在正表示和负表示 例如, public class DivZeroFun { public static
为什么Java中的以下语句不会报告算术异常
double d = 1.0/0;
简言之:浮点数可以表示无穷大(甚至可以表示产生非数字值的操作),因此导致无穷大的操作(例如除以0)是有效的 在Mohammod Hossain的回答的基础上进行扩展,并且,当“发生异常算术条件时”抛出算术异常。对于整数,除0就是这种情况,但是对于浮点数(
float
s和double
s),存在正表示和负表示
例如,
public class DivZeroFun {
public static void main(String args[]) {
double f = 5.0;
System.out.println(f / 0);
double f2 = -5.0;
System.out.println(f2/0);
}
}
此代码将打印“Infinity”,然后打印“-Infinity”作为其答案,因为“Infinity”实际上是Java编码的float
s和double
s的可接受值
此外,来自:
浮点表示通常包括+inf、-inf甚至“nota”
编号”。整数表示不需要。你看到的行为不是
Java所独有的,大多数编程语言都会做类似的事情,
因为浮点硬件(或低级库)就是这样的
做
再次从论坛帖子:
因为IEEE浮点数标准已经定义了
正无穷大和负无穷大的值,以及特殊的“非a”
“数字”案例。请参阅java.lang.Float和java.lang.Double中的contant
详情请参阅
因为它不是整数除法。相关:@Mysticial当然,但我想知道为什么只有整数除以零会导致异常!:-)这可能是Java设计者的一个问题。但这可能是因为整数除以零会触发硬件异常。但是浮点除以零只返回一个
INF
或NaN
。。。。两个不能在整型字段中表示的值。