powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Преобразование numeric в функции значений при различных условиях
9 сообщений из 9, страница 1 из 1
Преобразование numeric в функции значений при различных условиях
    #39860275
a.k.obabkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую форумчане, хотел попросить совета как сделать проще. Сейчас на данный момент в голову идут разные костыли.

Есть функция в ней для сборки фразы о цене подставляется значение типа numeric(9,2). И так получается, что в некоторых случаях клиент видит цену с копейками - 100.00 и тд

Хотелось бы 1. определять, что значение прилетело с .00 (якобы без копеек) и 2. выдавать соответственно значение без плавающей точки.
Для 2 варианта можно в принципе применить преобразование из numeric(9,2) просто в numeric(9) либо преобразовывать через CAST (значение AS тип).

Для 1 варианта, если вариант костыль я думал вычленять из значения, значение после точки и этим оперировать в виде
Код: sql
1.
 if _price like '%.00' then

, но мне кажется, что выглядит немного костыльно...хотелось бы что-то по проще, мб есть какие-то регулярки?
...
Рейтинг: 0 / 0
Преобразование numeric в функции значений при различных условиях
    #39860280
a.k.obabkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a.k.obabkovДля 1 варианта, если вариант костыль я думал вычленять из значения, значение после точки и этим оперировать в виде


Для 1 варианта, я думал вычленять из значения значение после точки и этим оперировать в виде...
...
Рейтинг: 0 / 0
Преобразование numeric в функции значений при различных условиях
    #39860281
a.k.obabkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
очень не хватает кнопки, редактировать
...
Рейтинг: 0 / 0
Преобразование numeric в функции значений при различных условиях
    #39860297
YuriyRusinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос к postgres'у не имеет отношения.
Код: plsql
1.
2.
3.
4.
5.
6.
 int np =_price*100;
 if (np/100*100 = np) then
     print "Цена без копеек";
 else
     print "Цена с копейками";
 end if;
...
Рейтинг: 0 / 0
Преобразование numeric в функции значений при различных условиях
    #39860299
YuriyRusinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если процедура написана на plpgsql.
...
Рейтинг: 0 / 0
Преобразование numeric в функции значений при различных условиях
    #39860311
a.k.obabkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuriyRusinovВопрос к postgres'у не имеет отношения.

как раз имеет, функция написана на plpgsql.

Ваше решение мне кажется сомнительным, т.к. я его сейчас прогнал руками и не могу понять в чем его суть. Если будет с копейками или без то значение будет true, проверял на 100.00 и 100.01
...
Рейтинг: 0 / 0
Преобразование numeric в функции значений при различных условиях
    #39860316
a.k.obabkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuriyRusinov
Код: plsql
1.
2.
3.
4.
5.
6.
 int np =_price*100; --подставляем 100.00 и получаем 10000.00
 if (np/100*100 = np) then --далее идет 10000.00/100*100 и получаем 10000.0000000000000000, сравниваем с значением которое получили первым, получаем true, так же будет и с 100.01 и тд
     print "Цена без копеек";
 else
     print "Цена с копейками";
 end if;
...
Рейтинг: 0 / 0
Преобразование numeric в функции значений при различных условиях
    #39860345
YuriyRusinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, к сожалению не знал, что Вы в принципе не хотите читать документацию, в которой говорится, что целочисленное деление в результате дает целое число, и более подробно должно быть расписано так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare
    np integer;
...
begin
    np :=_price*100;
    if (np/100::integer*100::integer = np) then
        raise warning 'Цена без копеек';
    else
        raise warning 'Цена с копейками';
    end if;



Код: plsql
1.
2.
3.
4.
5.
select 10001/100::integer*100::integer = 10001;
 ?column? 
----------
 f
(1 row)
...
Рейтинг: 0 / 0
Преобразование numeric в функции значений при различных условиях
    #39860353
a.k.obabkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuriyRusinovПардон, к сожалению не знал, что Вы в принципе не хотите читать документацию, в которой говорится, что целочисленное деление в результате дает целое число, и более подробно должно быть расписано так

хм и правда, в функцию всё переписал, вызвал и как бы работает. Спасибо! На досуге покурю маны.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Преобразование numeric в функции значений при различных условиях
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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