在 SQLite 中四舍五入到最接近或向上
Rounding to nearest or up in SQLite
我有一个现有的计算(在 SQL 中),其中包含几个涉及四舍五入的公式。现在我必须确保四舍五入使用 half up tie-breaking alorithm.
似乎默认情况下,SQLite 的 round
函数使用 half to even 算法。
有没有一种简单的方法可以将其更改为 half up?
内置 round
函数向负无穷大舍入。
SQL.
没有简单的方法可以直接对半对偶
您必须install your own自定义舍入函数,或修改SQL站点源代码:
if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
r = (double)((sqlite_int64)(r+0.5));
}else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
r = -(double)((sqlite_int64)((-r)+0.5));
}else{
zBuf = sqlite3_mprintf("%.*f",n,r);
sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
}
我有一个现有的计算(在 SQL 中),其中包含几个涉及四舍五入的公式。现在我必须确保四舍五入使用 half up tie-breaking alorithm.
似乎默认情况下,SQLite 的 round
函数使用 half to even 算法。
有没有一种简单的方法可以将其更改为 half up?
内置 round
函数向负无穷大舍入。
SQL.
没有简单的方法可以直接对半对偶您必须install your own自定义舍入函数,或修改SQL站点源代码:
if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
r = (double)((sqlite_int64)(r+0.5));
}else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
r = -(double)((sqlite_int64)((-r)+0.5));
}else{
zBuf = sqlite3_mprintf("%.*f",n,r);
sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
}