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

try*_*git 10 c# 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
Run Code Online (Sandbox Code Playgroud)

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

返回0:0

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

Phi*_*unt 18

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

  • 谢谢你的帮助. (2认同)

Mik*_*ark 9

C#文字喜欢0512属于类型int.Any 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();
}
Run Code Online (Sandbox Code Playgroud)