在SQLite中四舍五入或向上舍入

fumotvh3  于 2023-08-06  发布在  SQLite
关注(0)|答案(2)|浏览(179)

我有一个现有的计算(在SQL中),其中包含几个涉及舍入的公式。现在我必须确保四舍五入使用一半打破平局的算法。
默认情况下,SQLite的round函数使用半到偶数算法。
有没有一个简单的方法来改变这一点一半了

dzhpxtsq

dzhpxtsq1#

内置的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);
}

字符串

ygya80vv

ygya80vv2#

我遇到了这个问题,下面的SQL似乎可以工作:
从your_table中选择ceiling(1.0* your_number_column / round_to_number)* round_to_number
--注:需要1.0 ,以确保它成为小数
例如,如果'round_to_number'是最接近的500:
从your_table中选择上限(1.0 * your_number_column / 500)
500-
0保持0,1变成500,501变成1000,以此类推……

相关问题