Имя: Пароль:
1C
1C 7.7
v7: 1SQLite. Деление, типизация
,
0 Asakra
 
11.12.14
13:21
Кто использует 1SQLite выполните у себя код! Весьма неожиданный результат :(

База = СоздатьОбъект("SQLiteBase");
База.Открыть(":memory:");
Запрос = База.НовыйЗапрос();

Сообщить("1/50="+Запрос.ВыполнитьЗапрос("SELECT 1/50").ПолучитьЗначение(1,1));
1 cincout
 
11.12.14
13:30
у меня комп после такого взорвался. (0) мне должен новый комп!
2 Kain_wrath
 
11.12.14
13:34
у меня кошка после этого умерла. (0)мне должен новую кошку!
3 orefkov
 
11.12.14
13:35
На чистом sqlite:
SQLite version 3.8.2 2013-12-06 14:53:30
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select 1/50;
0
sqlite> select 1/50.0;
0.02
sqlite>
4 orefkov
 
11.12.14
13:36
sqlite> select 1/(50+0.0);
0.02
5 Asakra
 
11.12.14
13:39
(4) пасиб. я так сделал "SELECT 1/cast(50 as double)". пойду делать как у вас :)
6 Asakra
 
11.12.14
13:41
(1+0.0)/50 тоже фурычит
7 orefkov
 
11.12.14
13:44
(5)
cast - идеологически правильнее, скорее всего.
(6)
Достаточно одному из операндов быть с плавающей точкой, чтобы все выражение считалось с плавающей точкой. Иначе все считается в целых числах. Сишники знают :)
8 orefkov
 
11.12.14
13:46
+(7)
Ну и эта, деньги аккуратнее считай в sqlite, все таки double не numeric на самом деле, возможны казусы.
9 Asakra
 
11.12.14
13:48
(7) иногда запрос возвращает 0.00055555, а после типизации 0. можно как то побороть? не приятно когда стоит условие <> 0
10 Asakra
 
11.12.14
13:51
делаю условие, например >= 0.01 или <= 0.01 (зависит от знаков после запятой)
может как-то красивше можно?
11 Asakra
 
11.12.14
13:53
(8) спасибо! учту.
12 compors
 
11.12.14
14:02
(8) > Ну и эта, деньги аккуратнее считай в sqlite, все таки double не numeric на самом деле, возможны казусы.

А вобще есть СУБШ-ки которые нормально моей обсчитывают?
13 Ёпрст
 
11.12.14
14:05
(0) так делает не только скульлайт, фокс тоже этим "грешит"
14 Asakra
 
11.12.14
14:06
(13) век живи, век учись...
15 Ёпрст
 
11.12.14
14:07
Да,  снеговик - тоже..
16 Ёпрст
 
11.12.14
14:08
Ну, в смысле на tsql тоже
17 orefkov
 
11.12.14
14:08
(10)
Красивее считать все в целых копейках :)
А вес в граммах.
И то приходится при делении учитывать округление.
18 Asakra
 
11.12.14
14:09
(17) ок. понял.
19 Ёпрст
 
11.12.14
14:09
на голом скуле
select 1/5

результат 0
20 Asakra
 
11.12.14
14:20
(15) 1/5 в файловой фурычит
21 Asakra
 
11.12.14
14:46
(17) ни фига. тогда нужно делать условие >=1 or <=-1
22 Ёпрст
 
11.12.14
14:49
(20) файловую, не пользуем, на скуле будет как в (19)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.