簡體   English   中英

將Frege Double轉換為Integer

[英]Frege Double to Integer

我希望能夠將大型Double轉換為Integer ,但似乎floor的Frege Haskell實現不會產生Integral類型。 取而代之的是,它似乎實現了與Java進行交互的方式,並將Floating類型帶為DoubleFloating r => r -> Double 我可以使用round ,但是可以round而不是截斷(盡管我可以減去0.5 然后四舍五入)。 我寧願工作而不必求助於使用IntLong ,盡管后者很寬,但精度仍然受到限制。

有什么辦法可以將浮點類型設置為任意精度的整數類型?

此功能確實不可用。 原因是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM