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

时间:2012-03-21 10:45:28

标签: c# .net

是否有任何理由更倾向于使用Math.Floor而不是将其转换为整数类型?

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

OR

double num;
long floor = (long)num;

5 个答案:

答案 0 :(得分:42)

使用Math.Floor:

,在转换为整数类型之间存在一些差异
  1. 当投射到整体类型时,你最终会得到一个整数类型(显然)。因此,如果您想将数字保持为双倍,则使用Floor更容易。
  2. 作为1的结果,如果给定的数字太大而无法用给定的整数类型表示,则转换将无法正常工作(双数可以表示比长数字大得多的数字)。
  3. 地面朝向负无穷大。投掷回合为零。

答案 1 :(得分:21)

负值不同:

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

答案 2 :(得分:14)

Math.Floor是截断的根本不同的操作,因为它以不同的方式处理负数。 Math.Floor(-1.5) == -2.0(int)-1.5 == -1

答案 3 :(得分:7)

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

decimal d = decimal.MaxValue;

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

答案 4 :(得分:1)

即使您只处理正值,double值也不总是适合long

在MSDN上查看longdouble的范围。