# Comparison of approaches for rounding to an integer

English (en)

Real numbers can be converted to integers in many ways. Here's a comparison some of them.

```program ComparisonOfApproachesForRoundingToInteger(input,output);
// Comparison of approaches for rounding to an integer

uses  SysUtils,Math;

function RoundISO7185(x:real):integer;
// If x is positive or zero, round(x) shall be equivalent to trunc(x+0 .5) ;
// otherwise, round(x) shall be equivalent to trunc(x-0.5)
begin
If x >= 0 then result := trunc(x+0.5)
else result := trunc(x-0.5);
end;

var
r1,r2,r3,r4:real;
fmt : string;
begin
r1 := 1.3;
r2 := 1.6;
r3 := 3.5;
r4 := 4.5;
fmt := '%10s%10s%10s%10s%10s%10s%10s';
WriteLn(format(fmt,['Value','Write:x:0','Trunc','Round','ISO7185','Floor','Ceil']));
fmt := '%10d%10d%10d%10d%10d';
write (r1:10:1,r1:10:0);
WriteLn(format(fmt,[Trunc(r1),Round(r1),RoundISO7185(r1),floor(r1),ceil(r1)]));
write (r2:10:1,r2:10:0);
WriteLn(format(fmt,[Trunc(r2),Round(r2),RoundISO7185(r2),floor(r2),ceil(r2)]));
write (r3:10:1,r3:10:0);
WriteLn(format(fmt,[Trunc(r3),Round(r3),RoundISO7185(r3),floor(r3),ceil(r3)]));
write (r4:10:1,r4:10:0);
WriteLn(format(fmt,[Trunc(r4),Round(r4),RoundISO7185(r4),floor(r4),ceil(r4)]));
r1 := r1 *-1;
r2 := r2 *-1;
r3 := r3 *-1;
r4 := r4 *-1;
write (r1:10:1,r1:10:0);
WriteLn(format(fmt,[Trunc(r1),Round(r1),RoundISO7185(r1),floor(r1),ceil(r1)]));
write (r2:10:1,r2:10:0);
WriteLn(format(fmt,[Trunc(r2),Round(r2),RoundISO7185(r2),floor(r2),ceil(r2)]));
write (r3:10:1,r3:10:0);
WriteLn(format(fmt,[Trunc(r3),Round(r3),RoundISO7185(r3),floor(r3),ceil(r3)]));
write (r4:10:1,r4:10:0);
WriteLn(format(fmt,[Trunc(r4),Round(r4),RoundISO7185(r4),floor(r4),ceil(r4)]));
end.
```
``` Output:
Value Write:x:0     Trunc     Round   ISO7185     Floor      Ceil
1.3         1         1         1         1         1         2
1.6         2         1         2         2         1         2
3.5         4         3         4         4         3         4
4.5         5         4         4         5         4         5
-1.3        -1        -1        -1        -1        -2        -1
-1.6        -2        -1        -2        -2        -2        -1
-3.5        -4        -3        -4        -4        -4        -3
-4.5        -5        -4        -4        -5        -5        -4
```