Delphi/Lazarus: Function to Round Number to any Position after or before Decimal Point
Tutorial by Stefan Trost | Last update on 2023-01-21 | Created on 2014-02-21
The normal Delphi or Lazarus Round Method can be used to round a float or extended value to an integer just like this:
var e: extended; i: integer; begin e := 12.3456; i := round(e); // 12
But what can we do if we would like to specify the rounding precision or if we would like to round in the other direction? So, for example to the decade place or the thousands digit? If we would like to make a 10 from a 12, a 100 from a 123 or a 20000 from a 21345? Or if we would like to keep some of the decimal places?
For this case, we can use the following function:
function RoundEx(const AInput: extended; APlaces: integer): extended; var k: extended; begin if APlaces = 0 then begin result := round(AInput); end else begin if APlaces > 0 then begin k := power(10, APlaces); result := round(AInput * k) / k; end else begin k := power(10, (APlaces*-1)); result := round(AInput / k) * k; end; end; end;
Like Rounding in PHP, the RoundEx function can take positive or negative values depending on in which direction you would like to round. Here is an example:
var e, r: extended; begin e := 123.456; r := RoundEx(e, 0); // 123 r := RoundEx(e, 1); // 123.5 r := RoundEx(e, 2); // 123.46 r := RoundEx(e, -1); // 120 r := RoundEx(e, -2); // 100
The first parameter is our number, we would like to round. The second parameter is indicating the number of digits to which we would like to round.
Taking a 0 as a second parameter we get the same result as using the normal round function. With taking a positive number the function is cutting the desired number of decimal places from the number. Using a negative number, we can round to decade or thousands digit or any other higher decimal place.
About the Author
You can find Software by Stefan Trost on sttmedia.com. Do you need an individual software solution according to your needs? - sttmedia.com/contact
Show Profile
Related Topics
Delphi/Lazarus: 3 Ways to round a Number to X Decimal Places
Tutorial | 7 Comments
Delphi/Lazarus: Only allow Numbers in TEdit
Tip | 0 Comments
How to resize Image before Upload in Browser
Tutorial | 13 Comments
Lazarus: Load File as Byte Array and save Byte Array as File
Tutorial | 0 Comments
PHP: Rounding Numbers
Tutorial | 0 Comments
HTML5: Upload Images with Client Side Resize
Tutorial | 9 Comments
Delphi/Lazarus: Round Decimal Numbers up, down and normally
Tip | 0 Comments
Important Note
Please note: The contributions published on askingbox.com are contributions of users and should not substitute professional advice. They are not verified by independents and do not necessarily reflect the opinion of askingbox.com. Learn more.
Participate
Ask your own question or write your own article on askingbox.com. That’s how it’s done.