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

Zai*_*sud 17 .net c#

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

double num;
double floor = Math.Floor(num);
Run Code Online (Sandbox Code Playgroud)

要么

double num;
long floor = (long)num;
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 42

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

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


Dan*_*rth 21

它与负值不同:

double num = -1.3;
double floor = Math.Floor(num); // = -2
long cast = (long)num; // = -1
Run Code Online (Sandbox Code Playgroud)


Gab*_*abe 14

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


Luk*_*keH 7

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

decimal d = decimal.MaxValue;

decimal f = Math.Floor(d);    // succeeds
long l = (long)d;             // fails
Run Code Online (Sandbox Code Playgroud)