[Haskell-cafe] Problem with percentage function?
Tom Ellis
tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Sun Apr 20 21:45:29 UTC 2014
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
More information about the Haskell-Cafe
mailing list