Home > Enterprise >  Does Haskell have some sort of number conversion to scientific format?
Does Haskell have some sort of number conversion to scientific format?

Time:09-17

In JS we have Number.toExponential() which converts converts a number into its scientific notation (i.e : for 1000 -> "1e3").

I checked on hoggle but I can't seem to find it.

Note : toExponential changes num -> string

CodePudding user response:

You can make use of the printf :: PrintfType r => String -> r and work with a %e or %E specifier:

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

here %e specifies the scientific notation with a lowercase e, and the %E with an uppercase E. The output type of printf can be a String, or an IO (). If the String type is used we get a String with the formatted type, for IO () it will print the type to the stdout.


@Noughtmare also mentioned the showEFloat :: RealFloat a => Maybe Int -> a -> String -> String to prepend a string with the exponential representation of a RealFloat number type.


You can also work with a Scientific number, and then work with formatScientific :: FPFormat -> Maybe Int -> Scientific -> String.

If you thus install the scientific package, we can implement this with:

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

This thus means that the 1000 type should be Scientific not a `

  • Related