此功能确实不可用。原因是 Java 显然不提供支持它的方法。
您可以做的是将(下限)double 转换为 String 并将其转换为 Integer。
这是一个例子:
frege> import Prelude.Math(floor)
frege> integerFromDouble d = String.aton ("%.0f".format (floor d))
function integerFromDouble :: Math.Floating a => a -> Integer
frege> integerFromDouble 987654321e20
98765432100000000000000000000
我想知道是否有一种更有效的方法可以以某种方式从 Double 中提取尾数和指数并计算 Integer。
请注意,上述函数是不安全的,因为存在 NaN、+Infinity 和 -Infinity:
frege> integerFromDouble (5/0)
java.lang.NumberFormatException: For input string: "Infinity"
您可以单独检查或替换String.aton
为String.integer
,返回
Either NumberFormatException Integer
如果您可以确保您的计算不超过Long
容量,则可以通过以下方式完成您想要的:
round . floor