简而言之:
double类型定义了无穷大的值,而类型定义了无穷大
int。因此,在这种
double情况下,由于定义了计算结果,因此实际上是可以在给定类型中表示的值。在这种
int情况下,没有无穷大值,因此没有办法返回准确的结果。因此,例外。
VB.NET所做的事情有些不同。整数除法使用
/运算符自动产生浮点值。这是为了使开发人员可以编写表达式
1 /2,并将其求值为
0.5,有些人会认为这很直观。如果要查看与C#一致的行为,请尝试以下操作:
Console.WriteLine(1 0)
请注意,上面使用了 整数除法 运算符(
,not/)。我相信您会得到一个异常(或编译错误-不确定哪个)。
同样,请尝试以下操作:
Dim x As Object = 1 / 0Console.WriteLine(x.GetType())
上面的代码将输出
System.Double。
至于不精确点,这是另一种看待它的方法。并不是说
double类型没有正好为零的值(而是)。相反,该
double类型并不意味着首先提供
数学上精确的结果 。(可以准确地表示某些值,是的。但是 计算 不能保证准确性。)毕竟,没有定义 数学 表达式的值
1 /0(我最后检查过)。但是
1 / x随着x接近零,接近无穷大。因此,从这个角度来看,如果我们仍然无法
n / m精确地 表示大部分分数,则将
x/ 0案例视为近似值并给出其 接近 的值 __-再次,至少定义了无限。



