在 SQLite 中四舍五入到最接近或向上

问题描述 投票:0回答:2

我有一个现有的计算(在 SQL 中),其中包含几个涉及舍入的公式。现在我必须确保舍入使用 half up 打破平局算法

默认情况下,SQLite 的

round
函数使用 half to Even 算法。

有没有简单的方法可以将其更改为一半

sqlite floating-point rounding
2个回答
3
投票

内置

round
函数向负无穷大舍入。

没有简单的方法可以直接在 SQL 中进行半对偶运算。

您必须安装自己的自定义舍入函数,或修改 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);
}

0
投票

我遇到了这个问题,以下 sql 似乎可以工作:

选择上限(1.0* your_number_column / round_to_number)* round_to_number from your_table

-- 注意 1.0 * 需要确保它变成小数

例如,如果“round_to_number”是最接近的 500:

从 your_table 中选择上限(1.0 * your_number_column / 500) * 500 -

0 保持 0, 1 变成 500, 501 变成 1000, 等等...

© www.soinside.com 2019 - 2024. All rights reserved.