2

如何将楼层函数应用于浮点数或双精度值以获取整数。我从函数中得到了双精度值:4.4497083717E10 浮点值:4.4497084E10。我得到了作为双精度值的楼层值:4.4497083717E10 浮点值楼层:4.4497084416E10.Is有可能地板导致整数?

4

2 回答 2

4

.有没有可能 floor 导致整数?

从类型的角度来看 - 不。 Math.floor被声明为返回 a double,因此永远不会返回静态类型为int.

也就是说,该方法的文档声明返回值等于一个整数。因此,简单地将返回的结果转换为 anint将始终为您提供您期望的输出。

(也就是说,假设您的结果在范围内。Adouble可以容纳更大的数字,anint可以表示。请查看Narrowing primitive conversions了解技术细节。您可能需要对数据进行边界检查,以确保转换为 始终是明智的int。)

于 2012-04-20T09:42:21.677 回答
1

4.4497083717E10 太大而不能成为int,您必须强制转换为long

转换为 long 会保留 double 的整个部分,使其与Math.floor可以表示为 long 的值相同。IE

long l = (long) Math.floor(4.4497083717E10);

是相同的

long l = (long) 4.4497083717E10;

System.out.println((int) Math.floor(4.4497083717E10));
System.out.println((long) Math.floor(4.4497083717E10));
System.out.println((long) 4.4497083717E10);

印刷

2147483647   -- due to an overflow
44497083717
44497083717
于 2012-04-20T11:11:02.557 回答