Great! Now use SQLite API and add a new user defined function for your used case. I suppose that SQlite should always follow a well-defined pattern: in this case as Mr. Hipp said, it is IEEE754. Cheers!
> On 24 May 2019, at 08:27, radovan5 <radovan.antl...@siol.net> wrote: > > In Delphi I have 2 functions that works (I override default sqlite round): > > const > ExtEps = 1.0842021725E-19; > DblEps = 2.2204460493E-16; > KnownErrorLimit = 1.234375; > SafetyFactor = 2; > MaxRelErrDbl = DblEps * KnownErrorLimit * SafetyFactor; > MaxRelErrExt = ExtEps * KnownErrorLimit * SafetyFactor; > > function RoundExt(const AValue: Extended; const ADigit: Integer = -2): > Extended; > var > E: Extended; > begin > E := IntPower(10, -ADigit); > Result := Round(AValue * (1 + MaxRelErrExt) * E) / E; > end; > > function RoundDbl(const AValue: Double; const ADigit: Integer = -2): Double; > var > E: Double; > begin > E := IntPower(10, -ADigit); > Result := Round(AValue * (1 + MaxRelErrDbl) * E) / E; > end; > > You could implement it in sqlite. > > Regards Radovan > > > On 24.05.2019 13:13, Richard Hipp wrote: >> On 5/24/19, Hajo Bruns <hbr...@plansoft.de> wrote: >>> Hi, >>> the round function seems to round inconsistently: >>> >>> ivesselect round(5.485,2), round (3.555,2),round (3.255,2) >>> gives >>> 5,49 3,56 3,25 >>> >>> Last result should be 3.26 >> 3.255 cannot be exactly represented as an IEEE754 double-precision >> binary floating point number. So the system has to use an >> approximation. The closest approximation is >> 3.25499999999999989341858963598497211933135986328125 and that value >> rounds to 3.25. >> > > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users