为什么除(+)运算符在VB.NET和C#中表现不同?

Fre*_*dou 22 c# vb.net

如果您在C#和VB.NET中创建新项目,则直接进入立即窗口并键入:

? 567 / 1000
Run Code Online (Sandbox Code Playgroud)

C#将返回0,而VB.NET将返回0.567.

要在C#中获得相同的结果,您需要输入

? 567 / 1000.0
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种差异?为什么C#在1000之后需要显式小数点?

Meh*_*ari 34

所述在C#/操作员整数操作数,那么"整数除法"操作(相当于\操作者在VB.NET).对于VB.NET,它是"正常"除法(将给出小数结果).在C#中,为了做到这一点,你必须double明确地将至少一个操作数强制转换为浮点类型(例如).

  • 以防海报需要知道如何操作,在C#:567.0/1000.0; 或(双)567/1000; 甚至567 /(双)1000; 会给你你需要的东西.只要其中一个数字是双精度,就会执行浮点除法. (4认同)
  • 我的猜测是,这与VB(来自C#)不同的原因是因为VB.Net最初规定保留尽可能多的语法类似于VB6,以免疏远存在于VB6的大型VB6用户群.时间.这就是它在VB6中的工作方式. (3认同)

jas*_*son 11

因为在VB.NET中,/运算符被定义为返回浮点结果.它扩大了对输入double的分配.在C#中,/当两个输入都是整数时,运算符执行整数除法.

请参阅MSDN for VB.NET.

除以两个数字并返回浮点结果.

在执行除法之前,任何整数数字表达式都会扩展为Double.

有关C#,请参阅MSDN .

除法运算符(/)将其第一个操作数除以第二个操作数.所有数字类型都有预定义的除法运算

除以两个整数后,结果始终为整数.

要在VB.NET中获得与/C#中的整数运算符相同的语义,请使用\运算符.

除以两个数字并返回整数结果.