|
Float_as_double
|
|||
---|---|---|---|
#18+
Доброго всем дня! Недавно мы перешли с 8-го SQL Anywhere на 12-й и я столкнулся с такой проблемой При создании таблицы с полем типа float и записью в него значения, само значение искажается. Если объявить тип double, то все нормально. В принципе оно и понятно, ведь по умолчанию float это число одинарной точности, если эту точность не указать явно, float(32) например. Но есть такая опция бд Float_as_double, которая позволяет трактовать тип float по умолчанию как double. Так вот в SQL 8 эта опция работает, а вот в 12-й нет, хотя она там тоже присутствует. Код: sql 1. 2. 3.
В результате в таблице хранится число 20350.349609375 К сожалению изменить объявление необходимой мне таблицы я не могу, да и таблиц в системе полно с float. Может кто сталкивался, есть решение этой проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 12:41 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
heineken84При создании таблицы с полем типа float и записью в него значения, само значение искажается. Где оно искажается? У тебя клиент посылает double или float? А принимает обратно для отрисовки на экране что? Если будешь следить чтобы клиент и сервер работали с одинаковым типом данных, то и проблем не будет. heineken84Но есть такая опция бд Float_as_double, которая позволяет трактовать тип float по умолчанию как double. Читать Whats New главу в документации полезно. Эту опцию убрали в SA 11. heineken84Так вот в SQL 8 эта опция работает, а вот в 12-й нет, хотя она там тоже присутствует.Нет такого сервера "SQL 8", есть "ASA 8" и "SA 12". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 18:14 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
White Owl, да, убрали в 11й, уже прочитал. SQL Anywhere 12 и Adaptive Server Anywhere 8, да. я привел фрагмент кода, напишу еще раз Код: sql 1. 2. 3.
абсолютно не важно где он выполняется, это одна связка, читай как есть. можно его в interactive SQL загнать, а можно в любом другом месте реализовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 19:08 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
heineken84абсолютно не важно где он выполняется, это одна связка, читай как есть. можно его в interactive SQL загнать, а можно в любом другом месте реализовать.То есть в стандартном dbisql ты запускаешь код: Код: sql 1. 2. 3.
И получаешь разные результаты в двух колонках? У меня сейчас нету SA под рукой, не могу сам проверить. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 00:23 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
White Owl, да, у меня в результате выходит такой результат f d20350.34960937520350.35 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 08:30 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
у float в SA 12 precision=7. кошмар какой, как жить то ( Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 11:07 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
06.06.2012 12:07, heineken84 написал: > у float в SA 12 precision=7. кошмар какой, как жить то ( Фиксить свою говноподелку. Или ты думаешь, что разработчики сервера будут прогибать сервер под твоё поделие ;)? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 14:16 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
прикольно. вежливо и в тему. это не моя поделка незачем флудить если решения проблемы не знаешь ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 14:36 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
удивительно вообще, что вы рассчитываете даже при типе double увидеть на выходе число, которое вы записывали в таблицу. Если ваша программа на это заложена, то у вас в программе изначально неправильный алгоритм использования вещественных чисел. Если вам нужно полно совпадение до N знаков после запятой, то вам надо использовать другие типы данных, а не double/float. Почитайте на википедии, как комп хранит числа в этих форматах. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 15:34 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
искренне надеюсь, что вы в этих полях не отражаете денежные суммы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 15:34 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
06.06.2012 15:36, heineken84 написал: > незачем флудить если решения проблемы не знаешь Знаю. Какое из слов "фиксить поделку" ты не понял? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 15:42 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
Ggg_old, Согласен. Стандартный недочетик проектирования. Типа пусть будет, а вдруг копейки раздробят или типа так точнее:) У меня как раз разработчики системы такое допустили, т.е. денежные суммы, цены и т.п. Естественно возможности поправить безболезненно уже нет, т.к. слишком много наворочено. Хотя и сильных проблем тоже нет, просто всегда приходится об этом помнить когда код пишешь(процедуры, отчеты и т.п.). Где надо округлять, где надо преобразовывать и т.п. Но хорошо что float нигде не было(переход с 7 на 11), кроме своих процедур и временных таблиц. Поправили на double или numeric - полет нормальный ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 16:58 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
Не все системы с которыми приходится работать программисту разрабатывались им, и не все системы идеальны. Утверждать, что система за много тысяч долларов это говноподелка...ну не знаю. А ВЫ сами то много говна написали? Погрешность 1e-16 и тем более еще меньше меня не пугает, а вот фиксированные 2 или 4 знака после запятой при многократной конвертации валюты и дроблении и объединении заказов картину реально попортят. Но речь не об этом, а всего лишь о том, что тип float приравняли к real, а программа и правда была к этому не готова. Проблем с double при хранении денежных значений и операции с ними у меня никогда не было В общем я нашел редактор ресурсов и поправил создание временной таблицы в bpl модуле. Всем спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 22:06 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
heineken84, хранение денег в полях типа float/double это грубейшая ошибка! Я очень сочувствую вам, что приходится работать с такой системой, которую уже с чистой совестью можно таки назвать говносистемой. И погрешность там отнюдь не 1e-16. Почитайте например про проблему сложение малых чисел с большими итп косяки использования типов double. Но это не основное, млин... пипец, не ожидал что такое еще есть на свете. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 22:16 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
Ggg_old, да, такие еще бывают) будем надеяться разработчики читают этот форум) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 22:24 |
|
Float_as_double
|
|||
---|---|---|---|
#18+
06.06.2012 23:06, heineken84 написал: > Не все системы с которыми приходится работать программисту > разрабатывались им, и не все системы идеальны. Менять сервер БД у чужой программы без исходников, да ещё при этом перепрыгнув через 3 релиза на 4-й, - это весьма смелое решение. Остаётся надеяться, что больше ничего не выплывет. > Утверждать, что система за много тысяч долларов это говноподелка...ну не > знаю. А ВЫ сами то много говна написали? У меня деньги хранятся в полях с фиксированной точностью, засовывать их в плавучку как-то странно ;). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2012, 00:08 |
|
|
start [/forum/topic.php?fid=55&fpage=15&tid=2010121]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
138ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 253ms |
0 / 0 |