【问题标题】:C# 2.0 double handling - Bizarre behaviourC# 2.0 双重处理 - 奇怪的行为
【发布时间】:2011-03-21 15:11:57
【问题描述】:
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”计算为真,将“b”计算为假。在 VB.NET 中,等效代码将“a”计算为假,将“b”计算为假。为什么 'a' 会评估为真?

我在这里遗漏了一个隐式转换 - 为什么它不影响 VB.NET (Strict)?

【问题讨论】:

    标签: c# double decimal boolean


    【解决方案1】:

    1 和 1000 都是整数,因此结果将是整数(在本例中为 0)。您需要强制使用双精度数来完成数学运算。

    Boolean b = (dblValue >= ((double) 1/(double) 1000));
    

    Boolean b = (dblValue >= (1d / 1000d));
    

    会给你想要的结果。

    【讨论】:

      【解决方案2】:

      因为 1/1000 是整数表达式,所以产生 0

      【讨论】:

        【解决方案3】:

        表达式 1 / 1000 是在 C# 中使用整数算术计算的(在这种情况下是在编译时,尽管它实际上并不相关),因此计算结果为 0。使用 1.0 / 1000 1 代替强制 @ 987654325@要使用的算法。

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


        1 或者,根据 cmets,使用 1d(double) 1 或其他任何会强制将任一操作数视为 double 类型的东西。

        【讨论】:

        • 或将d 附加到任一参数以显式使其成为双精度。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 1970-01-01
        • 1970-01-01
        • 2011-06-16
        相关资源
        最近更新 更多