[Haskell-beginners] Retrieving the decimal portion of a Double

Shawn Willden shawn-haskell at willden.org
Mon Nov 23 10:45:00 EST 2009

On Monday 23 November 2009 07:31:05 am Dominic Sim wrote:
>     I am trying to retrieve the decimal portion of a Double. My code is:
>     getDecimal x = x - floor(x)

The problem is that x is a double (or some other kind of floating point or 
fraction), and "floor x" is an integer, and you can't subtract an integer 
from a double.  To convert "floor x" to a double (or to any other relevant 
type), use "fromIntegral", like:

	getDecimal x = x - fromIntegral(floor x)

However, what I'd really suggest is that you use:

	getDecimal x = snd (properFraction x)

or, in pointfree style:

	getDecimal = snd . properFraction

Also, the type signature for getDecimal should be:

	getDecimal :: RealFrac a => a -> a

That will allow it to be used with any Real or Fractional type.


More information about the Beginners mailing list