Haskell 是否有某种将数字转换为科学格式的功能?

5 math haskell exponential

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

我检查了 hoggle 但似乎找不到它。

注:以指数变化num -> string

Wil*_*sem 3

您可以使用printf :: PrintfType r => String -> r and 与%eor%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"
Run Code Online (Sandbox Code Playgroud)

这里%e指定小写的科学记数法e,以及%E大写的E。的输出类型printf可以是 aString或 an IO ()。如果String使用该类型,我们会得到一个String格式化类型,因为IO ()它将将该类型打印到标准输出。


@Noughtmare 还提到在字符串showEFloat :: RealFloat a => Maybe Int -> a -> String -> String前面添加数字类型的指数表示形式RealFloat


您还可以使用Scientific数字,然后使用formatScientific :: FPFormat -> Maybe Int -> Scientific -> String

如果您这样安装了该scientific软件包,我们可以通过以下方式实现:

Prelude> import Data.Scientific
Prelude Data.Scientific> formatScientific Exponent Nothing 1000
"1.0e3"
Run Code Online (Sandbox Code Playgroud)

因此,这意味着该1000类型不应该是Scientific`

  • 也许提到 [`Numeric.showEFloat`](https://hackage.haskell.org/package/base-4.14.1.0/docs/Numeric.html#v:showEFloat) 也很好(我个人不喜欢`printf` 的魔力)。 (2认同)