![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
округлить число [D6, XP]
Marat © (2006-12-21 07:35:00)Мне необходимо, чтобы в выборке
select 1/4
результат округлялся до максимума, т.е. вместо 0 мне необходимо получить 1
Anatoly Podgoretsky (2006-12-21 12:01:00) [1]> Marat (21.12.2006 11:42:13) [13]
Компьютерная Математика говорит, что Integer(1)/Integer(4)=Integer(0), а Float(1)/Integer(4)=Float(0.25)
Ты должен явно указывать тип значений, если хочешь получить явный результат, при неявном и получаешь неявный и удивляешься. Даже не бумаге делая данные расчеты ты неявно в уме приводишь их к Float, но эта неявность не совпадает с неявностью интерпритатора SQL сервера.
Anatoly Podgoretsky (2006-12-21 11:53:00) [2]> Marat (21.12.2006 11:27:11) [11]
Потому что надо читать сопровождающую документацию, объем ее настолько большой, что на форуме не выучишь и одного процента, а понять теорию баз и компьютерную математику вообще не удастся.
Marat (2006-12-21 11:42:00) [3]спасибо.
раньше считал что 1/4=0.25
оказывается не всегда так!
ЮЮ (2006-12-21 11:35:00) [4]потому, что 1 / 4 и 1.0 / 4 разного типа результаты, наверное.
Marat (2006-12-21 11:27:00) [5]а почему в анализере делаю
select ceiling(1/4)
0
а если
select ceiling(0.25)
1
???
все получилось, просто интересно.
ЮЮ (2006-12-21 11:21:00) [6]CEILING(a/b)
Marat (2006-12-21 11:17:00) [7]как сделать в проекте- знаю.
можно ли сразу из запроса?
Marat (2006-12-21 11:16:00) [8]запрос из MS SQL 2000
select a/b from...inner join...
где a, b ненулевые поля (Integer) из разных таблиц.
результат хочу
1 1
2,5 3
1,2 2
4,1 5
7 7
... ...
можно так или нет?
ЮЮ (2006-12-21 10:58:00) [9]CInt(1/4+0.5)
CEILING(0.25)
Trunc(x)+1
Могуч и разнообразен язык SQL. Особенно на разных серверах. :)
Desdechado (2006-12-21 10:53:00) [10]Trunc(x)+1
ЮЮ (2006-12-21 10:45:00) [11]Select CEILING(0.25)
Stanislav (2006-12-21 10:40:00) [12]Marat © (21.12.06 07:35)
извеняюсь select не заметил, PZ наверное тоже...
sniknik (2006-12-21 10:28:00) [13]SELECT CInt(1/4+0.5)
Stanislav (2006-12-21 10:25:00) [14]math.SetRoundMode(rmUp) ;
showmessage(FloatToStr(math.RoundTo(5.1,0)));
PZ (2006-12-21 10:16:00) [15]Как вариант можно предложить следующее:
Var
C : Integer;
R : Real;
If Round(R) < R then C := Round(R)+1
else C := Round(R);