RosettaCodeData/Task/Pathological-floating-point.../Haskell/pathological-floating-point...

12 lines
396 B
Haskell

-- | Show at least n decimal places
showRational :: Natural -> Rational -> String
showRational n r = let
sign = if r < 0 then '-' else '+'
(integer, rest) = (numerator r `quotRem` denominator r)
decimal = show $ rest * 10 ^ n `quot` denominator r
zeroes = replicate (fromIntegral n - length decimal) '0'
in sign : show integer ++ "." ++ zeroes ++ decimal