|
|
|
Плавающий DECIMAL
|
|||
|---|---|---|---|
|
#18+
Эпиграф: The NUMERIC and DECIMAL types are implemented as the same type by MySQL, as permitted by the SQL-92 standard. They are used for values for which it is important to preserve exact precision, for example with monetary data. DECIMAL and NUMERIC values are stored as strings, rather than as binary floating-point numbers, in order to preserve the decimal precision of those values. Проблема: Есть таблица t1 c полем d1 типа decimal(32,16) пишу UPDATE TABLE t1 SET d1=29.95; SELECT d1 FROM t1; 29.9499999999999990 no good исхитряюсь с кавычками UPDATE TABLE t1 SET d1="29.95"; 29.9500000000000000 good, но нужно кое-что посложнее, нужен инкрементальный update (ну, x=x+y) сбрасываю в ноль, затем UPDATE TABLE t1 SET d1=d1+29.95; 29.9499999999999990 та же история, а если с кавычками? UPDATE TABLE t1 SET d1=d1+"29.95"; 29.9499999999999990 хм, не помогает Поразмыслив делаю вывод, что 29.95 трактуется как float и в выражении с decimal этот float приводится к decimal-у 29.94999.... (либо наоборот - decimal к float, тогда вообще торба) Непонятно - какой смысл иметь такой "точный" DECIMAL, который может точно хранить, но в который нельзя точно положить? В 4-х MySql-ях появился полезнейший cast( as ), но, по-видимому, cast(29.95 as DECIMAL) не работает Всё это очень грустно. Я мог бы конечно брать d1, вне SQL его увеличивать, и потом ложить назад, хитро закавычив это дело, но... как-то это не очень... Если кто-то что-то, то буду очень рад. Благодарю за сотрудничество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2004, 17:39 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1855113]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 312ms |

| 0 / 0 |
