module Numeric.Extra(
    module Numeric,
    showDP,
    intToDouble, intToFloat, floatToDouble, doubleToFloat
    ) where

import Numeric
import Control.Arrow

---------------------------------------------------------------------
-- Data.String

showDP :: RealFloat a => Int -> a -> String
showDP n x = a ++ (if n > 0 then "." else "") ++ b ++ replicate (n - length b) '0'
    where (a,b) = second (drop 1) $ break (== '.') $ showFFloat (Just n) x ""


---------------------------------------------------------------------
-- Numeric

intToDouble :: Int -> Double
intToDouble = fromInteger . toInteger

intToFloat :: Int -> Float
intToFloat = fromInteger . toInteger

floatToDouble :: Float -> Double
floatToDouble = fromRational . toRational

doubleToFloat :: Double -> Float
doubleToFloat = fromRational . toRational