Re: [Haskell-cafe] weired

2005-07-16 Thread Einar Karttunen
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


[Haskell-cafe] weired

2005-07-16 Thread wenduan
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"

?!?!

--
X.W.D

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe