Страница 1 из 1
Преобразование вещественных типов в строковые
Добавлено: 06 ноя 2004, 12:13
Nik
Hi, All!
Необходимо перевести Numeric(9,2) в varchar(32) в SQL-запросе. Вроде ничего сложного cast( x as varchar(32)), но возникает проблема отсечения незначащих нкулей, т.е. нпример число 500 в Numeric(9,2) хранится как 500.00, а вот вывести ее в varchar(32) надо как '500', но cast дает '500.00'. Как правильно отсекать нули справа? Или это только в UDF можно сделать?
вариант
Добавлено: 08 ноя 2004, 15:32
Vemer
Не проще использовать на клиенте TField.DisplayText + TField.DisplayFormat [0.00] (для Delphi) или подобное?
Re: вариант
Добавлено: 09 ноя 2004, 08:23
Nik
Vemer писал(а):Не проще использовать на клиенте TField.DisplayText + TField.DisplayFormat [0.00] (для Delphi) или подобное?
Не проще, на клиента это float поле напрямую не передается, а используется при формировании (объединении) другого _текстового_ поля, которое ужу и отдается клиенту. Так что все форматирование должно происходить средствами IB
Добавлено: 09 ноя 2004, 10:55
kdv
ты что, числа в float хранишь???
Добавлено: 10 ноя 2004, 02:30
Nik
kdv писал(а):ты что, числа в float хранишь???
В этом случае - да, а что страшного? Я не знаю, сколько будет разрядов после запятой. Даже если число хранится как numeric(a,b), это не снимает изначальной постановки вопроса: как убрать правые незначащие нули после запятой (если они там есть) средствами IB/FB при конвертации в текстовый тип?
Re: Преобразование вещественных типов в строковые
Добавлено: 10 ноя 2004, 07:52
Владимир Каратаев
Добрый день!
Nik писал(а):
Необходимо перевести Numeric(9,2) в varchar(32) в SQL-запросе. Вроде ничего сложного cast( x as varchar(32)), но возникает проблема отсечения незначащих нкулей, т.е. нпример число 500 в Numeric(9,2) хранится как 500.00, а вот вывести ее в varchar(32) надо как '500', но cast дает '500.00'. Как правильно отсекать нули справа? Или это только в UDF можно сделать?
это реализуется оч. просто с помощью UDF. на сайте полно готовых UDF с нужной функцией pos- найти подстроку в строке, т.е. знак ".", а потом использовать substring. в ya такая функция (pos) наверное уже встроена.
если использовать udf не хочется, то можно в цикле от 1 до 32 с помощью substring выделять по одному символу и добавлять его к выходной строке. выход из цикла, если конец строки или встретиться "." но мой совет- использовать udf.
Добавлено: 10 ноя 2004, 12:19
kdv
Nik писал(а):kdv писал(а):ты что, числа в float хранишь???
В этом случае - да, а что страшного? Я не знаю, сколько будет разрядов после запятой. Даже если число хранится как numeric(a,b), это не снимает изначальной постановки вопроса: как убрать правые незначащие нули после запятой (если они там есть) средствами IB/FB при конвертации в текстовый тип?
страшно то, что float дает только 7 знаков после запятой, к тому же это вещественный тип, т.е. будут проблемы с округлением. numeric, кстати, никогда во float не отображается.
"незначащие" нули после запятой - на самом деле это не незначащие, а дробная часть. если тебе надо убрать дробную часть, то это значит либо округление, либо отбрасывание дробной части. Соответственно берем udf, и делаем нужную операцию.
Добавлено: 12 ноя 2004, 17:23
Гость
kdv писал(а):
страшно то, что float дает только 7 знаков после запятой, к тому же это вещественный тип, т.е. будут проблемы с округлением. numeric, кстати, никогда во float не отображается.
"незначащие" нули после запятой - на самом деле это не незначащие, а дробная часть. если тебе надо убрать дробную часть, то это значит либо округление, либо отбрасывание дробной части. Соответственно берем udf, и делаем нужную операцию.
А мне не нужна такая точность - 7 знаков. У меня поле - размерность дозировки товара (шампунь "Ромашка" 100,25 мл), больше 4-х не ожидается. Теперь вернемся к дробной части: мне ее _не надо_ отбрасывать или округлять, математически я все делаю в рамках тождества 10,25 = 10,2500. Надо изменить только символьное представление.
К слову, решение хранить нужное мне поле сразу в varchar(32) не пройдет, его еще и в вычислениях нужно использовать. Я пока решил хранить это поле и во float, и в varchar(32)
Re: Преобразование вещественных типов в строковые
Добавлено: 12 ноя 2004, 17:28
Гость
Владимир Каратаев писал(а):Добрый день!
это реализуется оч. просто с помощью UDF. на сайте полно готовых UDF с нужной функцией pos- найти подстроку в строке, т.е. знак ".", а потом использовать substring. в ya такая функция (pos) наверное уже встроена.
если использовать udf не хочется, то можно в цикле от 1 до 32 с помощью substring выделять по одному символу и добавлять его к выходной строке. выход из цикла, если конец строки или встретиться "." но мой совет- использовать udf.
Уточню пример, "10,240" _или_ "10.240". Как преобразовать с помощью этих функций?