[fpc-pascal] real to integer

Jonas Maebe jonas.maebe at elis.ugent.be
Mon May 29 14:57:49 CEST 2006


On 29 mei 2006, at 14:46, Thomas Miller wrote:

> I am frustrated by a very simple problem.  I am trying to convert  
> real to integer, using free pascal for mac.  I am an old Think  
> Pascal user who just recently found free pascal and, while thrilled  
> to have a pascal compiler for mac OSX,  I am still a bit lost.  In  
> Think Pascal, I would have just used "round", but this doesn't seem  
> to work.
>
> x : integer;
> y : real;
>
> x := round(y);
>
> gives me an error saying "got "Double" expected "SmallInt"".   This  
> occurs no matter how I define x:  integer, smallint, etc.  In fact,  
> if I set x to real, then the program compiles and works, simply  
> converting decimal values to 0 but not deleting them.
>
> I suspect I am making some simple error.  Any advice?

The problem is that Apple's universal interfaces also include a  
"round" function, which returns a real instead of an integral type.  
There are two solutions:

a) use "system.round(y)" so the compiler uses the round function from  
the system unit instead of from your carbon unit
b) switch to a new version of the Universal Interfaces translations  
(where that "round" function has been renamed "roundd"), available from
   http://www.elis.ugent.be/~jmaebe/nobackup/fpc/ 
FPCPInterfaces060428.zip

Note that in case b), instead of the Carbon unit, you have to use the  
"fpcmacosall" unit instead. It also fixes several bugs in the UI  
translations, so it's a good idea to upgrade them in either case.


Jonas



More information about the fpc-pascal mailing list