如何将楼层函数应用于浮点数或双精度值以获取整数。我从函数中得到了双精度值:4.4497083717E10 浮点值:4.4497084E10。我得到了作为双精度值的楼层值:4.4497083717E10 浮点值楼层:4.4497084416E10.Is有可能地板导致整数?
问问题
4424 次
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 回答