繁体   English   中英

为什么这段代码会返回不同的值? (C#和VB.NET)

[英]Why is this code returning different values? ( C# and VB.NET )

VB.NET代码:

Module Module1

Sub Main()
    Dim x, y As Single
    x = 0 + (512 / 2 - 407) / 256 * 192 * -1
    y = 0 + (512 / 2 - 474) / 256 * 192
    Console.WriteLine(x.ToString + ": " + y.ToString)
    Console.ReadLine()
End Sub

End Module

返回:113,25:-163,5

C#代码:

class Program
{
    static void Main(string[] args)
    {
        float x, y;
        x = 0 + (512 / 2 - 407) / 256 * 192 * -1;
        y = 0 + (512 / 2 - 474) / 256 * 192;
        Console.WriteLine(x + ": " + y);
        Console.ReadLine();
    }
}

返回0:0

我不明白,会很感激解释。

C# /执行整数除法,截断小数部分。 VB.NET隐式转换为Double

要执行浮点除法,请转换为浮点类型:

    static void Main(string[] args)
    {
        float x, y;
        x = 0 + (512 / 2 - 407) / (float)256 * 192 * -1;
        y = 0 + (512 / 2 - 474) / (float)256 * 192;
        Console.WriteLine(x + ": " + y);
        Console.ReadLine();
    }

0512这样的C#文字是int类型。 任何int/int (int除以int)都会产生整数除法,它会丢弃任何小数余数,从而失去精度。 如果使用浮点文字,如0F而不是0512F而不是512 ,则C#将执行浮点除法,这将保留小数部分。

static void Main(string[] args)
{
    float x, y;
    x = 0F + (512F / 2F - 407F) / 256F * 192F * -1F;
    y = 0F + (512F / 2F - 474F) / 256F * 192F;
    Console.WriteLine(x + ": " + y);
    Console.ReadLine();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM