【问题标题】:Does Haskell have some sort of number conversion to scientific format?Haskell 是否有某种数字转换为科学格式?
【发布时间】:2021-09-12 07:49:46
【问题描述】:

在 JS 中,我们有 Number.toExponential(),它将数字转换为其科学记数法(即:1000 -> "1e3")。

我查看了 hoggle,但似乎找不到。

注意:指数变化num -> string

【问题讨论】:

    标签: haskell math exponential


    【解决方案1】:

    您可以使用printf :: PrintfType r => String -> r 并使用%e%E 说明符:

    Prelude> import Text.Printf
    Prelude Text.Printf> printf "%e" 14.25 :: String
    "1.425e1"
    Prelude Text.Printf> printf "%E" 14.25 :: String
    "1.425E1"

    这里%e 用小写e 指定科学计数法,%E 用大写E 指定。 printf 的输出类型可以是StringIO ()。如果使用 String 类型,我们会得到带有格式化类型的 String,对于 IO (),它会将类型打印到标准输出。


    @Noughtmare also mentioned showEFloat :: RealFloat a => Maybe Int -> a -> String -> String 在字符串前面加上 RealFloat 数字类型的指数表示。


    您也可以使用Scientific 号码,然后使用formatScientific :: FPFormat -> Maybe Int -> Scientific -> String

    如果您因此安装scientific package,我们可以通过以下方式实现:

    Prelude> import Data.Scientific
    Prelude Data.Scientific> formatScientific Exponent Nothing 1000
    "1.0e3"

    这意味着1000 类型应该是Scientific 而不是`

    【讨论】:

    • 或许提一下Numeric.showEFloat也不错(我个人不太喜欢printf的魔力)。
    • 感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    相关资源
    最近更新 更多