我正在寻找一种在Haskell中的方法,以精确地格式化一个浮点数,在this (Java) question中描述的方式,为最佳紧凑性。我认为这也可以被称为“正常化”。
我将在这里复制该问题的示例场景:
2.80000 ->应格式化为"2.8"
765.000000 -> "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位精度限制四舍五入会导致此数字的尾随零被剥离)
在Haskell中有没有可以做到这一点的内置库,或者我必须使用自己的库?
发布于 2016-03-14 14:37:43
您正在寻找的是来自GHC.Float模块的formatRealFloat。我不确定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 == 0 = "0"
| abs v < 1e-5 || abs v > 1e10 = formatRealFloat FFExponent Nothing v
| v - fromIntegral (floor v) == 0 = formatRealFloat FFFixed (Just 0) v
| otherwise = formatRealFloat FFGeneric Nothing v当然,它只能与ghc编译器一起工作。
https://stackoverflow.com/questions/35978500
复制相似问题