
The problem is the type Double, which can not exactly represent numbers such as 0.1. You would have this same issue in any language where you're using binary floating point. How to work around this really depends on the use case. There are many approaches, such as using a type that can exactly represent all of the numbers in the domain you're working with, or just doing this sort of rounding on output. http://floating-point-gui.de/ On Sun, Apr 20, 2014 at 2:12 PM, Chapman, Anthony Sergio < a.s.chapman.10@aberdeen.ac.uk> wrote:
Good evening everyone.
I've made a percentage function for my application (with help from the internet) which is as follows.
-- 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
If anyone has any suggestions on how to solve this problem or know of a different/better way to convert to percentage please let me know.
Thanks _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe