Double dblValue = 0.0001;
Boolean a = (dblValue >= (1 / 1000));
Boolean b = (dblValue >= 0.001);
Console.WriteLine("dblValue >= (1 / 1000) is " + a);
Console.WriteLine("dblValue >= 0.001 is " + b);
Console.ReadLine();


上面的C#代码将'a'评估为true,将'b'评估为false。在VB.NET中,等效代码将“ a”评估为false,将“ b”评估为false。为什么“ a”评估为真?

我在这里没有隐式转换吗?为什么它不影响VB.NET(严格)?

最佳答案

在C#中使用整数算术对表达式1 / 1000进行评估(在这种情况下,虽然实际上是无关紧要的,但在编译时),因此评估为0。改为使用1.0 / 1000 1强制使用double算术。

我相信VB始终对/使用浮点算术,并且如果要使用整数算术执行除法,则必须使用\,这就是为什么在那里看到不同行为的原因。



1或者,根据注释,使用1d(double) 1或其他任何将使任何一个操作数都被视为double类型的操作。

关于c# - C#2.0双重处理-异常行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3344296/

10-09 06:54