Hello,
I saw that ROUND (0) is not equal to 0. It took some time to understand this.
In the first place it is that the outcome of ROUND is always of type text. That
is necessarily so, as a decimally rounded number has no exact binary
representaion. For instance 1.23 is really 1.229999.... So text is more
correct. The second thing to understand was that when comparing two
expressions, sqlite does not try any data conversion. This way '0' is never
equal to 0.
Knowing this, you can just use CAST (ROUND (...) AS NUMBER) for numerical
expressions.
I am mainly interested in speed, and found still an alternative not using ROUND
() at all. For instance to round a number x to 1 decimal:
CAST (x * 10. - 0.5 + (x >= 0) AS INT) / 10.
This gives a factor 2 improvement compared to CAST (ROUND (x) AS NUMBER). But
sqlite is so fast that you need to repeat it 100.000 times before noticing any
wait time at all.
May this be something for a new built-in function?
Thanks, Edzard Pasma
_____________________________________________________________
Tired of spam and viruses? Get a VolcanoMail account with SpamShield Pro and
Anti-Virus technology! http://www.volcanomail.com/