
Thank you very much, that worked a charm. The numbers crunching was done way before the printing so that's all I needed. Now it seems a bit peculiar to me that in your functions, you didn't define the input ie toPerc = printf "%.2f" . (*100) instead of toPerc number = printf "%.2f" . (*100)
Would you might pointing me in the right direction to understand why you didn't have to give it a variable input when defining the function?
Thanks again.
________________________________________
From: Haskell-Cafe
-- 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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe