C#2.0双重处理 - 奇怪的行为

Rus*_*hyo 1 c# double boolean decimal

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();
Run Code Online (Sandbox Code Playgroud)

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

我在这里缺少一个隐式转换 - 为什么它不影响VB.NET(严格)?

Jon*_*eet 14

1 / 1000在C#中使用整数运算来计算表达式(在这种情况下编译时,虽然它确实无关),因此计算结果为0.使用1.0 / 1000 1来强制使用double算术.

我相信VB 总是使用浮点运算/,\如果你想使用整数运算执行除法,你必须使用,这就是你在那里看到不同行为的原因.


1或者,根据注释,使用1d或者(double) 1强制任何操作数被视为类型的任何其他东西double.

  • 或者将`d`附加到任一参数以明确地使其成为双精度. (3认同)

Jus*_*ner 5

1和1000都是整数,因此结果将是一个整数(在这种情况下为0).你需要强制使用双打来完成数学运算.

Boolean b = (dblValue >= ((double) 1/(double) 1000));
Run Code Online (Sandbox Code Playgroud)

要么

Boolean b = (dblValue >= (1d / 1000d));
Run Code Online (Sandbox Code Playgroud)

会给你你期望的结果.