2016-03-14 30 views
1

我正在尋找一種方法在Haskell中,以便按照this (Java) question中所述的方式完成浮點數的格式化,以實現最佳緊湊性。我認爲這也可以被稱爲「正常化」。格式浮點後隨零和小數點被剝離,在haskell中切換到大數的科學表示法

我將在示例場景從這個問題複製在這裏: - >格式應爲"2.8"

765.000000 -

2.80000>"765"(注意小數點怎麼也下降)

0.0073943162953 - >"0.00739432"(在這種情況下極限位數精度爲—至6)

0.0000073943162953 - >"7.39432E-6"(切換至科學記數法如果振幅足夠小,比1E-5 —少在這種情況下)

7394316295300000 - >"7.39432E+6"(切換至科學記數法如果振幅足夠大—例如,當大於1E+10

0.0000073900000000 - >"7.39E-6"(條從科學記數法有效數)尾隨零

0.000007299998344 - >"7.3E-6"(來自6位精度極限CAU的舍入es這個數字具有被剝離的尾部零)

Haskell中是否有內置函數庫可以執行此操作,還是必須自行推出?

+0

*「Haskell中是否有內置函數庫可以執行此操作,還是必須自行編譯?」*您可能需要編輯它。詢問圖書館是無關緊要的。 – Zeta

回答

3

你在找什麼是formatRealFloatGHC.Float模塊。我不確定在haskell.org上是否有該模塊的文檔,但這裏是模塊的摘要:http://www.cis.upenn.edu/~bcpierce/courses/advprog/resources/base/GHC.Float.html

您需要修改它以滿足您的需要,但這裏有一個示例:

import GHC.Float 

formatFloat :: RealFloat a => a -> String 
formatFloat v 
    | v < 1e-5 || v > 1e10   = formatRealFloat FFExponent Nothing v 
    | v - fromIntegral (floor v) == 0 = formatRealFloat FFGeneric (Just 0) v 
    | otherwise      = formatRealFloat FFGeneric Nothing v 

當然,它只能使用ghc編譯器。

+0

太棒了!這應該是最好的答案。 – dinomario10

相關問題