|
|
|
не могу понять, округляет неправильно
|
|||
|---|---|---|---|
|
#18+
есть табличка а, структура: gl - character bal - double 8, ALTER TABLE a.dbf ADD COLUMN bal1 i (50) UPDATE a SET bal1 = bal/1000 все делает нормально, кроме, если значение - 1000678, то он округляет в столбце bal1 - 1000 , но должно же быть 1001 как сделать надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2006, 07:58 |
|
||
|
не могу понять, округляет неправильно
|
|||
|---|---|---|---|
|
#18+
UPDATE a SET bal1 = Round(bal/1000,0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2006, 08:17 |
|
||
|
не могу понять, округляет неправильно
|
|||
|---|---|---|---|
|
#18+
1) Для типа INTEGER значение размерности игнорируется. Его можно вообще не указывать. Такие поля всегда занимают 4 байта. Т.е. "bal1 i (50)" ошибки не вызовет, просто (50) будет проигнорировано 2) При модификации содержимого полей типа INTEGER дробная часть просто отбрасывается. Не округляется. Это эквивалентно примерно такому преобразованию ?INT(1000678/1000) Чтобы этого избежать, необходимо использовать явные функции округления ROUND(), как и предложил Piva Как вариант. Если вместо типа INTEGER использовать тип NUMERIC или FLOAT, то в этом случае будет происходить округление. Код: plaintext 1. 2. Размерность N(10) даже несколько больше, чем размерность INTEGER в смысле допустимых значений. Но физически занимает больше места. 10 байт вместо 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2006, 10:47 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=261&tid=1591820]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 316ms |

| 0 / 0 |
