在SQLite中舍入到最近或最近

时间:2016-02-18 15:37:13

标签: sqlite floating-point rounding

我有一个现有的计算(在SQL中),其中包含几个涉及舍入的公式。现在我必须确保舍入使用一半 tie-breaking alorithm

默认情况下,SQLite的round函数似乎使用 half to even 算法。

是否有一种简单的方法可以将其更改为一半

1 个答案:

答案 0 :(得分:3)

内置的round函数向负无穷大舍入。

没有简单的方法可以直接在SQL中进行半连接。

您必须install your own自定义舍入功能,或修改SQLite源代码:

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);
}