powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Float_as_double
16 сообщений из 16, страница 1 из 1
Float_as_double
    #37825696
heineken84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго всем дня!
Недавно мы перешли с 8-го SQL Anywhere на 12-й и я столкнулся с такой проблемой

При создании таблицы с полем типа float и записью в него значения, само значение искажается. Если
объявить тип double, то все нормально. В принципе оно и понятно, ведь по умолчанию float это число одинарной точности,
если эту точность не указать явно, float(32) например.

Но есть такая опция бд Float_as_double, которая позволяет трактовать тип float по умолчанию как double. Так вот в SQL 8 эта опция работает, а вот в 12-й нет, хотя она там тоже присутствует.

Код: sql
1.
2.
3.
create table #a(q float)
insert into #a values(20350.35)
select q from #a



В результате в таблице хранится число 20350.349609375

К сожалению изменить объявление необходимой мне таблицы я не могу, да и таблиц в системе полно с float. Может кто сталкивался, есть решение этой проблемы?
...
Рейтинг: 0 / 0
Float_as_double
    #37826478
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
heineken84При создании таблицы с полем типа float и записью в него значения, само значение искажается. Где оно искажается? У тебя клиент посылает double или float? А принимает обратно для отрисовки на экране что?
Если будешь следить чтобы клиент и сервер работали с одинаковым типом данных, то и проблем не будет.

heineken84Но есть такая опция бд Float_as_double, которая позволяет трактовать тип float по умолчанию как double. Читать Whats New главу в документации полезно. Эту опцию убрали в SA 11.

heineken84Так вот в SQL 8 эта опция работает, а вот в 12-й нет, хотя она там тоже присутствует.Нет такого сервера "SQL 8", есть "ASA 8" и "SA 12".
...
Рейтинг: 0 / 0
Float_as_double
    #37826544
heineken84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

да, убрали в 11й, уже прочитал. SQL Anywhere 12 и Adaptive Server Anywhere 8, да.

я привел фрагмент кода, напишу еще раз

Код: sql
1.
2.
3.
create table #a(q float)
insert into #a values(20350.35)
select q from #a



абсолютно не важно где он выполняется, это одна связка, читай как есть. можно его в interactive SQL загнать, а можно в любом другом месте реализовать.
...
Рейтинг: 0 / 0
Float_as_double
    #37826839
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
heineken84абсолютно не важно где он выполняется, это одна связка, читай как есть. можно его в interactive SQL загнать, а можно в любом другом месте реализовать.То есть в стандартном dbisql ты запускаешь код:
Код: sql
1.
2.
3.
create table #a(f float, d double);
insert into #a values(20350.35, 20350.35);
select * from #a;


И получаешь разные результаты в двух колонках? У меня сейчас нету SA под рукой, не могу сам проверить.
...
Рейтинг: 0 / 0
Float_as_double
    #37826968
heineken84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

да, у меня в результате выходит такой результат

f d20350.34960937520350.35
...
Рейтинг: 0 / 0
Float_as_double
    #37827169
heineken84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у float в SA 12 precision=7. кошмар какой, как жить то (

Код: sql
1.
select * from SYS.SYSDOMAIN
...
Рейтинг: 0 / 0
Float_as_double
    #37827655
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.06.2012 12:07, heineken84 написал:

> у float в SA 12 precision=7. кошмар какой, как жить то (

Фиксить свою говноподелку. Или ты думаешь, что разработчики сервера
будут прогибать сервер под твоё поделие ;)?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Float_as_double
    #37827697
heineken84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прикольно. вежливо и в тему.
это не моя поделка

незачем флудить если решения проблемы не знаешь
...
Рейтинг: 0 / 0
Float_as_double
    #37827823
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
удивительно вообще, что вы рассчитываете даже при типе double увидеть на выходе число, которое вы записывали в таблицу. Если ваша программа на это заложена, то у вас в программе изначально неправильный алгоритм использования вещественных чисел. Если вам нужно полно совпадение до N знаков после запятой, то вам надо использовать другие типы данных, а не double/float.
Почитайте на википедии, как комп хранит числа в этих форматах.
...
Рейтинг: 0 / 0
Float_as_double
    #37827825
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
искренне надеюсь, что вы в этих полях не отражаете денежные суммы.
...
Рейтинг: 0 / 0
Float_as_double
    #37827845
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.06.2012 15:36, heineken84 написал:

> незачем флудить если решения проблемы не знаешь

Знаю. Какое из слов "фиксить поделку" ты не понял?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Float_as_double
    #37828047
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ggg_old,

Согласен. Стандартный недочетик проектирования. Типа пусть будет, а вдруг копейки раздробят или типа так точнее:)
У меня как раз разработчики системы такое допустили, т.е. денежные суммы, цены и т.п.
Естественно возможности поправить безболезненно уже нет, т.к. слишком много наворочено.
Хотя и сильных проблем тоже нет, просто всегда приходится об этом помнить когда код пишешь(процедуры, отчеты и т.п.). Где надо округлять, где надо преобразовывать и т.п.
Но хорошо что float нигде не было(переход с 7 на 11), кроме своих процедур и временных таблиц. Поправили на double или numeric - полет нормальный
...
Рейтинг: 0 / 0
Float_as_double
    #37828499
heineken84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не все системы с которыми приходится работать программисту разрабатывались им, и не все системы идеальны.
Утверждать, что система за много тысяч долларов это говноподелка...ну не знаю. А ВЫ сами то много говна написали?
Погрешность 1e-16 и тем более еще меньше меня не пугает, а вот фиксированные 2 или 4 знака после запятой при многократной конвертации валюты и дроблении и объединении заказов картину реально попортят. Но речь не об этом, а всего лишь о том, что
тип float приравняли к real, а программа и правда была к этому не готова.
Проблем с double при хранении денежных значений и операции с ними у меня никогда не было

В общем я нашел редактор ресурсов и поправил создание временной таблицы в bpl модуле.
Всем спасибо.
...
Рейтинг: 0 / 0
Float_as_double
    #37828514
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
heineken84, хранение денег в полях типа float/double это грубейшая ошибка! Я очень сочувствую вам, что приходится работать с такой системой, которую уже с чистой совестью можно таки назвать говносистемой.
И погрешность там отнюдь не 1e-16. Почитайте например про проблему сложение малых чисел с большими итп косяки использования типов double.
Но это не основное, млин... пипец, не ожидал что такое еще есть на свете.
...
Рейтинг: 0 / 0
Float_as_double
    #37828526
heineken84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ggg_old,

да, такие еще бывают) будем надеяться разработчики читают этот форум)
...
Рейтинг: 0 / 0
Float_as_double
    #37828610
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.06.2012 23:06, heineken84 написал:

> Не все системы с которыми приходится работать программисту
> разрабатывались им, и не все системы идеальны.

Менять сервер БД у чужой программы без исходников, да ещё при этом
перепрыгнув через 3 релиза на 4-й, - это весьма смелое решение. Остаётся
надеяться, что больше ничего не выплывет.

> Утверждать, что система за много тысяч долларов это говноподелка...ну не
> знаю. А ВЫ сами то много говна написали?

У меня деньги хранятся в полях с фиксированной точностью, засовывать их
в плавучку как-то странно ;).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Float_as_double
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]