
On Sun, Apr 20, 2014 at 09:12:29PM +0000, Chapman, Anthony Sergio wrote:
-- Turns a number into a percentage toPerc :: Double -> Double toPerc x = 100*(myRound x 4) -- Rounds a number to s decimal points myRound n s = fromIntegral (round (n * factor)) / factor where factor = fromIntegral (10^s)
I would it to round to 2 decimal places no matter what the size of the input is
ei toPerc 0.22222222222222 --- = 22.22 toPerc 0.22342222222222 --- = 22.34
The problem is that what I actually get is 22.220000000000002
The other replies, whilst correct, have been a bit oblique to your question. The upshot is you should do the rounding when displaying, not in the floating point value itself. import Text.Printf toPerc :: Double -> String toPerc = printf "%.2f" . (*100) *Main> toPerc 0.22222222222222 "22.22" *Main> toPerc 0.22342222222222 "22.34" Tom