弗雷格双倍整数
Frege Double to Integer
我希望能够将大的 Double
转换为 Integer
,但 floor
的弗雷格 Haskell 实现似乎无法生成Integral
类型。相反,它似乎被实现为以 Java 的方式进行交互,并将 Floating
类型转换为 Double
、Floating r => r -> Double
。我可以使用 round
,但那是四舍五入而不是截断(虽然我可以减去 0.5 和 then 一轮)。我宁愿工作而不需要诉诸于使用 Int
或 Long
,它们与后者一样广泛,但精度仍然有限。
有什么方法可以将浮点类型转换为任意精度整数类型?
此功能确实不可用。原因是 Java 显然没有提供支持它的方法。
您可以做的是将(floored)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
,即 returns
Either NumberFormatException Integer
如果您可以确保您的计算不超过 Long
容量,您可以通过以下方式完成您想要的:
round . floor
您也可以在调用 floor
.
后在 Double
结果上调用 intValue
http://docs.oracle.com/javase/6/docs/api/java/lang/Number.html#intValue%28%29
我希望能够将大的 Double
转换为 Integer
,但 floor
的弗雷格 Haskell 实现似乎无法生成Integral
类型。相反,它似乎被实现为以 Java 的方式进行交互,并将 Floating
类型转换为 Double
、Floating r => r -> Double
。我可以使用 round
,但那是四舍五入而不是截断(虽然我可以减去 0.5 和 then 一轮)。我宁愿工作而不需要诉诸于使用 Int
或 Long
,它们与后者一样广泛,但精度仍然有限。
有什么方法可以将浮点类型转换为任意精度整数类型?
此功能确实不可用。原因是 Java 显然没有提供支持它的方法。
您可以做的是将(floored)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
,即 returns
Either NumberFormatException Integer
如果您可以确保您的计算不超过 Long
容量,您可以通过以下方式完成您想要的:
round . floor
您也可以在调用 floor
.
Double
结果上调用 intValue
http://docs.oracle.com/javase/6/docs/api/java/lang/Number.html#intValue%28%29