相关疑难解决方法(0)

为什么无限远在Windows 10控制台中打印为"8"?

我正在测试从分区返回的内容,包括零0/1,1/00/0.为此,我使用了类似于以下内容的东西:

Console.WriteLine(1d / 0d);
Run Code Online (Sandbox Code Playgroud)

但是这段代码打印8不到Infinity或者其他一些字符串常量就像PositiveInfinity.

为了完整性,以下所有内容均为8:

Console.WriteLine(1d / 0d);

double value = 1d / 0d;
Console.WriteLine(value);

Console.WriteLine(Double.PositiveInfinity);
Run Code Online (Sandbox Code Playgroud)

Console.WriteLine(Double.NegativeInfinity);打印-8.

为什么这个无限打印8?


对于那些似乎认为这是一个无穷大符号而不是八个以下程序的人:

Console.WriteLine(1d / 0d);

double value = 1d / 0d;
Console.WriteLine(value);

Console.WriteLine(Double.PositiveInfinity);

Console.WriteLine(8);
Run Code Online (Sandbox Code Playgroud)

输出:

无限输出

.net c# windows

144
推荐指数
5
解决办法
2万
查看次数

不同值类型之间的除零行为不一致

请考虑以下代码和评论:

Console.WriteLine(1 / 0); // will not compile, error: Division by constant zero

int i = 0;
Console.WriteLine(1 / i); // compiles, runs, throws: DivideByZeroException

double d = 0;
Console.WriteLine(1 / d); // compiles, runs, results in: Infinity   
Run Code Online (Sandbox Code Playgroud)

我可以理解编译器在运行时主动检查除零常量和DivideByZeroException但是:

为什么在"除零"中使用双精度返回Infinity而不是抛出异常?这是设计还是错误?

只是为了踢,我也在VB.NET中做到了这一点,结果是"更一致":

dim d as double = 0.0
Console.WriteLine(1 / d) ' compiles, runs, results in: Infinity

dim i as Integer = 0
Console.WriteLine(1 / i) '  compiles, runs, results in: Infinity

Console.WriteLine(1 / 0) ' compiles, runs, results in: Infinity …
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net divide-by-zero .net-3.5

41
推荐指数
2
解决办法
1万
查看次数


标签 统计

c# ×3

.net ×2

.net-3.5 ×1

calculator ×1

divide-by-zero ×1

math ×1

vb.net ×1

windows ×1