[英]Frege Double to Integer
我希望能夠將大型Double
轉換為Integer
,但似乎floor
的Frege Haskell實現不會產生Integral
類型。 取而代之的是,它似乎實現了與Java進行交互的方式,並將Floating
類型帶為Double
, Floating r => r -> Double
。 我可以使用round
,但是可以round
而不是截斷(盡管我可以減去0.5 然后四舍五入)。 我寧願工作而不必求助於使用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
,這將返回
Either NumberFormatException Integer
如果可以確保計算不超過Long
容量,則可以使用以下方法完成所需的操作:
round . floor
您也可以在調用floor
之后在Double
結果上調用intValue
。
http://docs.oracle.com/javase/6/docs/api/java/lang/Number.html#intValue%28%29
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.