首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格式化浮点数,去掉尾随的零和小数点,在haskell中切换为大数字的科学记数法

格式化浮点数,去掉尾随的零和小数点,在haskell中切换为大数字的科学记数法
EN

Stack Overflow用户
提问于 2016-03-14 10:15:29
回答 1查看 482关注 0票数 2

我正在寻找一种在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中有没有可以做到这一点的内置库,或者我必须使用自己的库?

EN

回答 1

Stack Overflow用户

发布于 2016-03-14 14:37:43

您正在寻找的是来自GHC.Float模块的formatRealFloat。我不确定haskell.org上是否有该模块的文档,但以下是该模块的摘要:http://www.cis.upenn.edu/~bcpierce/courses/advprog/resources/base/GHC.Float.html

当然,您需要修改它以满足您的需要,但这里有一个示例:

代码语言:javascript
复制
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编译器一起工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35978500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档