Math.Floor vs转换为C#中的整数类型

是否有任何理由人们更喜欢使用Math.Floor vs转换为整数类型?

double num; double floor = Math.Floor(num); 

要么

 double num; long floor = (long)num; 

在转换为整数类型和使用Math.Floor之间存在一些差异:

  1. 当铸造成一个整体类型时,你最终会得到一个整体类型(显然)。 因此,如果您想将数字保持为双倍,则使用Floor更容易。
  2. 作为1的结果,如果给定的数字太大而不能用给定的整数类型表示,则铸造将无法正常工作(双数可以表示比长数字大得多的数字)。
  3. 地板朝向负无穷大。 向零舍入。

它与负值不同:

 double num = -1.3; double floor = Math.Floor(num); // = -2 long cast = (long)num; // = -1 

Math.Floor是一种与截断完全不同的操作,因为它以不同的方式处理负数。 Math.Floor(-1.5) == -2.0 ,而(int)-1.5 == -1

除了其他答案之外,不要忘记在Floor可以成功的情况下,施法可能会失败:

 decimal d = decimal.MaxValue; decimal f = Math.Floor(d); // succeeds long l = (long)d; // fails 

即使你只处理正值, double值并不总是适合long

在MSDN上查看longdouble范围。