Преобразование вещественных типов в строковые
Преобразование вещественных типов в строковые
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 можно сделать?
Необходимо перевести Numeric(9,2) в varchar(32) в SQL-запросе. Вроде ничего сложного cast( x as varchar(32)), но возникает проблема отсечения незначащих нкулей, т.е. нпример число 500 в Numeric(9,2) хранится как 500.00, а вот вывести ее в varchar(32) надо как '500', но cast дает '500.00'. Как правильно отсекать нули справа? Или это только в UDF можно сделать?
вариант
Не проще использовать на клиенте TField.DisplayText + TField.DisplayFormat [0.00] (для Delphi) или подобное?
Re: вариант
Не проще, на клиента это float поле напрямую не передается, а используется при формировании (объединении) другого _текстового_ поля, которое ужу и отдается клиенту. Так что все форматирование должно происходить средствами IBVemer писал(а):Не проще использовать на клиенте TField.DisplayText + TField.DisplayFormat [0.00] (для Delphi) или подобное?
В этом случае - да, а что страшного? Я не знаю, сколько будет разрядов после запятой. Даже если число хранится как numeric(a,b), это не снимает изначальной постановки вопроса: как убрать правые незначащие нули после запятой (если они там есть) средствами IB/FB при конвертации в текстовый тип?kdv писал(а):ты что, числа в float хранишь???
-
- Сообщения: 22
- Зарегистрирован: 01 ноя 2004, 11:11
Re: Преобразование вещественных типов в строковые
Добрый день!
если использовать udf не хочется, то можно в цикле от 1 до 32 с помощью substring выделять по одному символу и добавлять его к выходной строке. выход из цикла, если конец строки или встретиться "." но мой совет- использовать udf.
это реализуется оч. просто с помощью UDF. на сайте полно готовых UDF с нужной функцией pos- найти подстроку в строке, т.е. знак ".", а потом использовать substring. в ya такая функция (pos) наверное уже встроена.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 не хочется, то можно в цикле от 1 до 32 с помощью substring выделять по одному символу и добавлять его к выходной строке. выход из цикла, если конец строки или встретиться "." но мой совет- использовать udf.
страшно то, что float дает только 7 знаков после запятой, к тому же это вещественный тип, т.е. будут проблемы с округлением. numeric, кстати, никогда во float не отображается.Nik писал(а):В этом случае - да, а что страшного? Я не знаю, сколько будет разрядов после запятой. Даже если число хранится как numeric(a,b), это не снимает изначальной постановки вопроса: как убрать правые незначащие нули после запятой (если они там есть) средствами IB/FB при конвертации в текстовый тип?kdv писал(а):ты что, числа в float хранишь???
"незначащие" нули после запятой - на самом деле это не незначащие, а дробная часть. если тебе надо убрать дробную часть, то это значит либо округление, либо отбрасывание дробной части. Соответственно берем udf, и делаем нужную операцию.
А мне не нужна такая точность - 7 знаков. У меня поле - размерность дозировки товара (шампунь "Ромашка" 100,25 мл), больше 4-х не ожидается. Теперь вернемся к дробной части: мне ее _не надо_ отбрасывать или округлять, математически я все делаю в рамках тождества 10,25 = 10,2500. Надо изменить только символьное представление.kdv писал(а): страшно то, что float дает только 7 знаков после запятой, к тому же это вещественный тип, т.е. будут проблемы с округлением. numeric, кстати, никогда во float не отображается.
"незначащие" нули после запятой - на самом деле это не незначащие, а дробная часть. если тебе надо убрать дробную часть, то это значит либо округление, либо отбрасывание дробной части. Соответственно берем udf, и делаем нужную операцию.
К слову, решение хранить нужное мне поле сразу в varchar(32) не пройдет, его еще и в вычислениях нужно использовать. Я пока решил хранить это поле и во float, и в varchar(32)
Re: Преобразование вещественных типов в строковые
Уточню пример, "10,240" _или_ "10.240". Как преобразовать с помощью этих функций?Владимир Каратаев писал(а):Добрый день!
это реализуется оч. просто с помощью UDF. на сайте полно готовых UDF с нужной функцией pos- найти подстроку в строке, т.е. знак ".", а потом использовать substring. в ya такая функция (pos) наверное уже встроена.
если использовать udf не хочется, то можно в цикле от 1 до 32 с помощью substring выделять по одному символу и добавлять его к выходной строке. выход из цикла, если конец строки или встретиться "." но мой совет- использовать udf.