Han*_*ant 20
有两种方法来划分数字.快速的方式和缓慢的方式.许多编译器都试图欺骗你快速完成它.C#是其中之一,试试这个:
using System;
class Program {
static void Main(string[] args) {
Console.WriteLine(1 / 2);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:0
你对这个结果感到满意吗?当表达式的左侧和右侧是整数时,它在技术上是正确的,记录的行为.这会进行快速整数除法.处理器上的IDIV指令,而不是(臭名昭着的)FDIV指令.也完全符合所有大括号语言的工作方式.但绝对是SO的"wtf发生"问题的主要来源.为了获得快乐的结果,你必须做这样的事情:
Console.WriteLine(1.0 / 2);
Run Code Online (Sandbox Code Playgroud)
产量:0.5
左侧现在是双重的,迫使浮点除法.根据计算器显示的结果.调用FDIV的其他方法是将右侧设为浮点数,或者通过将其中一个操作数显式地转换为(double).
VB.NET不能以这种方式工作,/运算符始终是浮点除法,无论类型如何.有时候,你真的做想的整数除法.这是什么\.
neo*_*862 11
10 / 3 = 3.333
10 \ 3 = 3 (the remainder is ignored)
Run Code Online (Sandbox Code Playgroud)