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

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

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

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

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

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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2016, 10:47
Ответы с готовыми решениями:

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

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

округление значений в EXCEL
Доброй ночи! Подскажите, пожалуйста, как написать формулу, или какие свойства к применить к ячейке? Пример: 17 * 12 * 13 * 145...

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

У ROUND, кстати два параметра, вы его в ваших примерах тупо неправильно вызываете, поэтому ошибку вам и выдает
SQL
1
ROUND(rashod,1)
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
27.05.2016, 12:38
Цитата Сообщение от 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 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
27.05.2016, 12:58
Цитата Сообщение от 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  [ТС]
Выложил функцию "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
Цитата Сообщение от 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  [ТС]
Короче говоря, проверил вот что:

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
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от 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\my prog\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
Надо не так 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  [ТС]
Подошло вот что:

PHP
1
mazut.leadzero(round(rashod,1))
0
765 / 666 / 194
Регистрация: 24.11.2015
Сообщений: 2,163
27.05.2016, 15:14
Цитата Сообщение от 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  [ТС]
Мне нужно было вывести десяток, с показом +- значения от него.

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

Решение

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

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

Добавлено через 1 минуту
А если Вам действительно нужен плюс, попробуйте TRIM(to_char(rashod, 'sfm99999999990.9'))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2016, 15:26
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru