wenduan <[EMAIL PROTECTED]> writes:
> The following function which converts a number represents a sum of money
> in pence didn't work as expected and the result didn't make any sense to me:
>
> penceToString :: Price -> String
> penceToString p =
> let str = show p
>len = length str
> in
> if len ==1 then "0.0" ++ str else
> if len ==2 then "0." ++ str else (take (len-2) str) ++ "." ++
> (drop (len - 2) str )
>
> *Main> penceToString 234566678786
> "-6710990.94"
You are encountering the fact the Int is a fixed size type (32 bits on
many common architectures). Thus
*Main> 234566678786 :: Int
-671099094
Which explains the result.
To make the program work use Integer instead of Int.
- Einar Karttunen
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe