我正在测试从分区返回的内容,包括零0/1,1/0和0/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)
输出:
请考虑以下代码和评论:
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#将字符串表达式转换为整数值
最佳和最短的方法来评估数学表达式c#evaluate
string"3*(4 + 2)"yield int 18
有没有办法以不同的方式计算像(2-3/4*12)这样的数学表达式?