I ran into the old familiar rounding issue - again. And of course, I didn't have the code I used to get it squared away.
My original blog post from 7 years ago, "Rounding the Currency type like they taught us in school", explains the issue in full detail and nothing has changed with regard to how Delphi handles rounding.
And as usual David Heffernan gave...
So I went back to the Stack Overflow post to revisit the answers given to my original question. And as usual David Heffernan gave a very straightforward and succinct answer.
{---------------------------------------------------------------} { Added 2019-08-07 } { } { Used to solve the Delphi's rounding function. } { } { https://stackoverflow.com/q/10965759/195983 } { https://stackoverflow.com/a/10970283/195983 } {---------------------------------------------------------------} Function RoundTo2dp (Value: Currency): Currency; begin Result := Trunc(Value*100+IfThen(Value>0, 0.5, -0.5))/100; end;
I added the code to my StrStuff unit. (Does everyone have a StrStuff unit or is it just me?) And it did not compile. So, when I got done cussing out Heffernan for putting bum code out there, I did some digging.
It turns out there are two IfThen functions. One in the SystemStrUtils unit and the other one in the System.Math unit. And of course, I chose the wrong unit.
This specific IfThen function is from System.Math
This specific IfThen function is from the System.Math unit:
unit Strstuff; interface uses System.Sysutils, System.Math; Function RoundTo2dp (Value: Currency): Currency;And of course after I put the correct unit in the uses clause it worked like a champ. I must admit, it felt good cussing out Heffernan. But as usual... he's right. Again!
Thank you David.
Enjoy!
Semper Fi
Gunny Mike
https://zilchworks.com
External Reference Update: 2021-06-04