С Новым годом! Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Всем отличного настроения
3 / 3 / 3
Регистрация: 17.03.2014
Сообщений: 166
1

Округление значений

27.05.2016, 10:47. Показов 3315. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем !!!

Есть запрос такого вида:

PHP
1
2
select name  \"Наименование\",round(uroven,1) \"Уровень (см)\",mazut.leadzero(rashod)  \"Расход (т/ч)\",
round (ostatok,1) \"Остаток (т)\",round (svob_ob,1) \"Свободный объём (м3)\" FROM v_main_table
Округление по всем столбикам проходит, только вот по столбику "(rashod)" не проходит.

Там в основе mazut - таблица, функция "leadzero" строка, столбик (rashod)

В этом столбике вопрос, как записать округление?

// Если я пишу так:
PHP
1
mazut.leadzero(round rashod,1)  "Расход (т/ч)"
- в таком случае ошибка.


PHP
1
select round (mazut.leadzero(rashod),1) FROM v_main_table
Привёл запись к такому виду, только в SQL навигаторе показывает числа - 0,2 и т.п.

А на PHP - не работает функция mazut.leadzero

В PHP - выводит число _,2

Добавлено через 18 минут
Попробовал записать так:

SQL
1
mazut.leadzero(round(rashod),1)
Ничего не изменилось...
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2016, 10:47
Ответы с готовыми решениями:

Округление значений в Memo
Здравствуйте, не могу разобраться, как округлить получившиеся значения. Вроде просто, если...

Округление числовых значений
А такой вопрос, почему итоги как-то странно считаются, числа вводятся вручную, а дроби в итоге...

округление значений в EXCEL
Доброй ночи! Подскажите, пожалуйста, как написать формулу, или какие свойства к применить к...

Округление принимаемых значений
В Access есть таблица с двумя колонками, по очереди с каждой строчки беру два значения. Подскажите,...

13
476 / 239 / 114
Регистрация: 12.05.2016
Сообщений: 647
27.05.2016, 12:24 2
А зачем нужна функция mazut.leadzero и что она делает - мы естественно сами догадаться должны?

У ROUND, кстати два параметра, вы его в ваших примерах тупо неправильно вызываете, поэтому ошибку вам и выдает
SQL
1
ROUND(rashod,1)
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
27.05.2016, 12:38 3
Цитата Сообщение от no@n Посмотреть сообщение
как записать округление?
Смотря что Вы хотите. Можно округлить то, что съедает функция mazut.leadzero. А можно округлить возвращаемый ею результат. Наконец, можно округлить и то, и другое
Получится, соответственно,
SQL
1
2
3
4
5
mazut.leadzero(round(rashod,1))
 
round(mazut.leadzero(rashod),1)
 
round(mazut.leadzero(round(rashod,1),1)
Добавлено через 5 минут
Кстати, может быть, Ваша проблема состоит в том, что функция mazut.leadzero возвращает не число, а строку. Тогда округление может Вам очень сильно все испортить.
Так что же возвращает функция mazut.leadzero, и вообще, что она делает?

Добавлено через 50 секунд
Было бы неплохо, если бы Вы привели текст этой функции
0
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
27.05.2016, 12:58 4
Цитата Сообщение от Anvano
У ROUND, кстати два параметра, вы его в ваших примерах тупо неправильно вызываете, поэтому ошибку вам и выдает
Второй параметр по умолчанию 0, поэтому
SQL
1
2
3
ROUND(fld1)
-- эквивалентно
ROUND(fld1, 0)
0
Всем отличного настроения
3 / 3 / 3
Регистрация: 17.03.2014
Сообщений: 166
27.05.2016, 14:35  [ТС] 5
Выложил функцию "leadzero"

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
FUNCTION LEADZERO(p1 IN varchar2)
     RETURN varchar2 
     IS
     f NUMBER;
 BEGIN
  IF p1!='Нет данных' THEN
     f:=to_number(p1);
     
     IF f>0 AND f<1 THEN
      IF INSTR(p1, '.') = 0 THEN
        RETURN '0' || p1;
      END IF;  
        
     elsif f>-1 AND f<0 THEN    
      
       IF INSTR(to_char(abs(f)), '.') = 0 THEN
        RETURN '-0' || to_char(abs(f));
       END IF;
       
     ELSE     
       RETURN p1;
     END IF;
  ELSE RETURN p1;   
  END IF;     
    END;
Добавлено через 7 минут
Теперь надеюсь видно, что добавляет +/- к 0, перед запятой...
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
27.05.2016, 14:43 6
Цитата Сообщение от no@n Посмотреть сообщение
IF p1!='ГЌГҐГІ Г¤Г*Г*Г*ûõ' THEN
О-о! Тут у Вас еще приключения с кодировкой....
Бред какой-то. Как, в принципе, может быть, чтобы было IF f>0 AND f<1 THEN, и при этом в представлении числа не было десятичного разделителя? Эта функция вообще, хоть когда-то срабатывает?
А попробуйте выполнить такой селект
SQL
1
SELECT mazut.leadzero(rashod), rashod FROM v_main_table
и выложить результат.
0
Всем отличного настроения
3 / 3 / 3
Регистрация: 17.03.2014
Сообщений: 166
27.05.2016, 14:44  [ТС] 7
Короче говоря, проверил вот что:

SQL
1
mazut.leadzero(round(rashod,1))
Работает. Но не совсем помоему точно...

Так как должны быть цифры: -0,005 / 4,929 / 0,015 / 0,066

А выводит: 0 / 4,9 / 0 / 0,1
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
27.05.2016, 14:47 8
Цитата Сообщение от no@n Посмотреть сообщение
еперь надеюсь видно, что добавляет +/- к 0, перед запятой
Насчет плюса - не видно. А минус и так должен добавляться к отрицательному числу, для этого не нужно огород городить

Добавлено через 1 минуту
Цитата Сообщение от no@n Посмотреть сообщение
А выводит: 0 / 4,9 / 0 / 0,1
Ну так округляйте до трех знаков, и будет Вам счастье
SQL
1
mazut.leadzero(round(rashod),3)
0
Всем отличного настроения
3 / 3 / 3
Регистрация: 17.03.2014
Сообщений: 166
27.05.2016, 15:02  [ТС] 9
Цитата Сообщение от AGK Посмотреть сообщение
и выложить результат.
Выкладываю:

1) столбик MAZUT.LEADZERO(RASHOD)
Значения: -0,005 / 0,015

2) второй столбик - RASHOD
Значения: -,005 / ,015

Добавлено через 9 минут
Округлил, получил ошибку:

Warning: oci_execute() [function.oci-execute]: ORA-06553: PLS-306: wrong number or types of arguments in call to 'LEADZERO' in C:\Site\localhost\www\nktec1.tgc16.ru\myprog\mazut (web programm - test !!!)\index.php on line 124

Добавлено через 1 минуту
Код:
PHP
1
2
$stmt = oci_parse($conn, "select name  \"Наименование\",round(uroven) \"Уровень (см)\",mazut.leadzero(round(rashod),3) \"Расход (т/ч)\",
round (ostatok,1) \"Остаток (т)\",round (svob_ob,1) \"Свободный объём (м3)\" FROM v_main_table");
Добавлено через 1 минуту
Может я что-то не так делаю?
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
27.05.2016, 15:06 10
Надо не так mazut.leadzero(round(rashod),3), а вот так mazut.leadzero(round(rashod,3))

Зачем нужно страдать всякой фигней, когда есть стандартные функции.
Попробуйте два варианта, вдруг какой-то подойдет
SQL
1
2
3
TRIM(regexp_replace(to_char(round(rashod,3), 'fm99999999990.999'),'\.$') )
 
TRIM(to_char(round(rashod,3), 'fm99999999990.999'))
Единственная проблема, если в поле rashod может быть текст в какой-то страшной кодировке. Тогда действительно нужно перехватывать такие строки. Но даже в этом случае лучше максимально использовать стандартные возможности
1
Всем отличного настроения
3 / 3 / 3
Регистрация: 17.03.2014
Сообщений: 166
27.05.2016, 15:12  [ТС] 11
Подошло вот что:

PHP
1
mazut.leadzero(round(rashod,1))
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
27.05.2016, 15:14 12
Цитата Сообщение от no@n Посмотреть сообщение
Так как должны быть цифры: -0,005 / 4,929 / 0,015 / 0,066
Не понял, как мог вариант с
Цитата Сообщение от no@n Посмотреть сообщение
mazut.leadzero(round(rashod,1))
вывести три цифры, которые Вам были нужны
0
Всем отличного настроения
3 / 3 / 3
Регистрация: 17.03.2014
Сообщений: 166
27.05.2016, 15:18  [ТС] 13
Мне нужно было вывести десяток, с показом +- значения от него.

Например:
1) -0,066
Это будет -0,1
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
27.05.2016, 15:26 14
Лучший ответ Сообщение было отмечено no@n как решение

Решение

Цитата Сообщение от no@n Посмотреть сообщение
Например:
1) -0,066
Это будет -0,1
Это делается стандартной функцией TRIM(to_char(rashod, 'fm99999999990.9'))
Форматирование - оно тоже округление делает

Добавлено через 1 минуту
Функция, которую Вы привели, не добавляет никаких плюсов.

Добавлено через 1 минуту
А если Вам действительно нужен плюс, попробуйте TRIM(to_char(rashod, 'sfm99999999990.9'))
1
27.05.2016, 15:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2016, 15:26
Помогаю со студенческими работами здесь

округление и сумма округленных значений
Добрый день. Помогите, пожалуйста, округлить Например: у меня в в каждой ячейке с А1 по А20...

Округление значений переменных в PHP
Есть функция &lt;?php function fl(){ if($n-$n(int)=0;){ $n=$n(int);} else{ $n=$n(int)-1; } }

Округление значений до сотых одной командой
Добрый день, форумчане. Помогите решить проблему с округлением значений до сотых. Я знаю как...

Округление значений в двумерной динамической матрице
Как сделать так, чтобы при делении, вычитании и прочих действий между значениями двумерной матрицы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru