Math.Floor vs转换为C#中的整数类型
是否有任何理由人们更喜欢使用Math.Floor vs转换为整数类型?
double num; double floor = Math.Floor(num);
要么
double num; long floor = (long)num;
在转换为整数类型和使用Math.Floor之间存在一些差异:
- 当铸造成一个整体类型时,你最终会得到一个整体类型(显然)。 因此,如果您想将数字保持为双倍,则使用Floor更容易。
- 作为1的结果,如果给定的数字太大而不能用给定的整数类型表示,则铸造将无法正常工作(双数可以表示比长数字大得多的数字)。
- 地板朝向负无穷大。 向零舍入。
它与负值不同:
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上查看long
和double
范围。