[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

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.


More information about the fpc-pascal mailing list