2016-02-18 4 views
1

У меня есть существующий расчет (в SQL), который содержит несколько формул, включающих округление. Теперь я должен убедиться, что округление использует половинуtie-breaking alorithm.Округление до ближайшего или вверх в SQLite

Похоже, что функция round SQLite использует алгоритм с точностью до.

Есть ли простой способ изменить это на на половину?

ответ

2

Встроенный 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); 
} 
+0

Я кончался [переопределение] (https://www.sqlite.org/c3ref/create_function.html) встроенная функция 'round' с одним из моих собственных, что было удивительно просто. Спасибо за указатель! – Martijn

Смежные вопросы