powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Округление данных в таблице
25 сообщений из 51, страница 1 из 3
Округление данных в таблице
    #32197166
dave604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Парни, ситуация такая.

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

2. Если ставишь в свойстве поля запроса Формат поля -> Фиксированный -> Число десятичных знаков = 0 то значение в этом поле при просмотре Запроса показывается как округленное до целого, но в других запросах, берущих данные из этого запроса, это значение не округленное. Также в отчете по этому запросу печатается не округленное значение.
Т.е. например, если значение выходит 1.55 то при просмотре Запроса оно 2, но в других запросах оно снова 1.55 и в отчете оно 1.55.

Вопрос:
Можно решить эти проблемы, не прибегая к програмированию, используя стандартные средства Access
Если все таки нужно програмировать,поделитесь строчками кода.
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197191
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см. здесь /topic/31080
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197284
dave604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Парни, стуация такая. что я полный чайник в програмировании в MSA
я сисадмин и надо очень быстро сделать базу данных под ACCEESS
Все что в моих силах, я сделал,базу с помощью визуальных средств MSA и небольших запросах, но вот эта проблема - ОКРУГЛЕНИЕ ЧИСЕЛ В ЗАПРОСАХ мне уже все мозги заканопатила, а время идет.

ГУРУ MSA, если вам не будет в лом, напишите ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ, как можно добавить КОД В ЗАПРОС? Как вообще решить эту проблему?
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197298
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я программист на Акесе, и мне надо быстро поднять контролер домена и развернуть IIS.


В запросе (если у тебя акес2000/2002) используй функцию Round(ИмяПоляЗапроса, Точность)

Select Round(Pole1,2) From Table1
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197567
dave604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый Senin Viktor.

Подскажите пож-та недоумку, как вставить эту функцию в запрос?
куда нажать, за что дернуть и etc ...

Есть запрос и есть в запросе ПОЛЕ, куда я написал формулу.

Нить: IIf([Гориз]![Шир]<130;2*([Гориз]![Шир]/100)+4*([Гориз]![Выс]/100);4*([Гориз]![Шир]/100)+8*([Гориз]![Выс]/100))+([Гориз]![Нить]/100)

Теперь надо, что бы значение в этом ПОЛЕ на выходе округлялось.

Виктор, я понимаю, что вопрос для вас тупой и не заслуживающий даже того, что бы ответить, но уж так приспичило, что прям вой =)
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197582
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор
только не забудь
сказать КАК округляет
твоя функция round()
поскольку дисскусия
уже была по этом
поводу
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197585
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>но уж так приспичило, что прям вой

Ну если ТАК приспичело, что же ты свой топик бросил на 4 часа-то?


Например, с точностью до 3 знаков:
Код: plaintext
1.
Round(IIf([Гориз]![Шир]< 130 ; 2 *([Гориз]![Шир]/ 100 )+ 4 *([Гориз]![Выс]/ 100 ); 4 *([Гориз]![Шир]/ 100 )+ 8 *([Гориз]![Выс]/ 100 ))+([Гориз]![Нить]/ 100 ); 3 ) 
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197591
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Хам

А я и не забыл
см. топик от 13:11. Узнаешь?
К тому же dave604 вроде Инженер - для него будет привычно способ округления.
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197604
dave604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виктор, спасибо! Дай бог те денег побольше!
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197612
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Дай бог те денег побольше!

Вот толковое "Спасибо", его бы еще обналичить
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197637
dave604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виктор, позвольте быть до конца наглым и спросить Вас, а как можно округлить до большего данное поле?
Например, получаеся 1.3 а надо на выходе иметь 2?
Можно ли это сделать с помощью Round ???
По ссылке есть от 13:11 есть что то подобное в виде ФУНКЦИЙ, но я, к моему огромному стыду, не знаю, куда и как вставлять эти функции в запросе.

Как всегда по возможности подробный алгоритм для тупых =)
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197645
dave604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел вот это, утверждается, что округляет до большего

Function MyRound(n,p)
pow=10^p
MyRound=-int(-n*pow)/pow
End Function

Правильно ли это и если да, то как это применимо именно к моему случаю?
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197666
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я использую
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Function okrug(Number As Variant, NumDigits As Long) As Double
    Dim dblPower                   As Double
    Dim varTemp                    As Variant
    Dim intsgn                     As Integer
    If Not IsNumeric(Number) Then
        okrug =  0 
        Exit Function
    End If
    dblPower =  10  ^ NumDigits
    intsgn = Sgn(Number)
    Number = Abs(Number)
    varTemp = CDec(Number) * dblPower +  0 . 49 
    okrug = intsgn * Int(varTemp) / dblPower

End Function


Например,
? okrug (1550,-2)
даст 1500
? okrug (1550,-3)
даст 2000
? okrug (1550,-4)
даст 0

Вставь данную функцию в модуль, если модуля нет - создай.
Вместо Round напиши okrug (можешь вообще переименовать функцию как душе угодно, например
Public Function RoundMy(Number As Variant, NumDigits As Long) As Double
Тогда и вызывай как RoundMy
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32197667
dave604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок, спасибо, завтра попробую.
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198003
dave604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виктор, привет.

Короче, смотри.
1 - создал модуот okrug

Код: plaintext
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.
26.
27.
28.
Public Function okrug(Number As Variant, NumDigits As Long) As Double

    Dim dblPower                   As Double

    Dim varTemp                    As Variant

    Dim intsgn                     As Integer

    If Not IsNumeric(Number) Then

        okrug =  0 

        Exit Function

    End If

    dblPower =  10  ^ NumDigits

    intsgn = Sgn(Number)

    Number = Abs(Number)

    varTemp = CDec(Number) * dblPower +  0 . 49 

    okrug = intsgn * Int(varTemp) / dblPower


End Function


2 - написал в запросе формулу

Код: plaintext
Нить: okrug(IIf([Гориз]![Шир]< 130 ; 2 *([Гориз]![Шир]/ 100 )+ 4 *([Гориз]![Выс]/ 100 ); 4 *([Гориз]![Шир]/ 100 )+ 8 *([Гориз]![Выс]/ 100 ))+([Гориз]![Нить]/ 100 );- 3 )


Access при выполнении запроса выдает

Код: plaintext
Неопределенная функция 'okrug' в выражении


Виктор, в чем может быть дело?
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198078
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>в чем может быть дело?

В том что данной функции для Акеса нет .

Ты создал модуль в той же базе, где и запрос.
Откомпилировал и сохранил. Функция объявлена как Public - все должно работать.
Попробуй в Immediate окне (Ctrl+G) в модуле набрать
? okrug (25555.555, 0)
и нажать ввод - если выдаст значение, то все нормально и в запросе эта функция тоже должна работать.
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198092
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Господа, прошу многа-многа прощения, но почему 0.49??? А почему не 0.499, например? Имхо, должно быть так: если округление к ближайшему, то 0.5, а если вверх, как было попрошено изначально (чтобы 1.1 округляло к 2), то вообще надо юзаться обо что-нибудь типа -Int(-x).

На всякий случай из хелпа:

The difference between Int and Fix is that if number is negative, Int returns the first negative integer less than or equal to number, whereas Fix returns the first negative integer greater than or equal to number. For example, Int converts -8.4 to -9, and Fix converts -8.4 to -8.

Вот на этом "Int converts -8.4 to -9" можно сыграть для округления вверх.
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198109
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот-вот
что то типа
iif(number<0,int(number),int(number)+1)
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198116
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorry,конечно
iif(number<0,abs(int(number)),int(number)+1)
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198122
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
VIG, thanx. Только без abs было лучше.
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198144
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Господа, прошу многа-многа прощения, но почему 0.49??? А почему не 0.499, например? \r
\r
В /topic/31080 топик от 6 май 03, 17:51 я писал\r
\r
Зато можно управлять округлением, если поставить +0,49 - то в меньшую, если оставить как есть +0,5 - то в большую. \r
\r
\r
т.е. при 0,49\r
? okrug(1.75,1) - 1,7\r
при 0,50\r
? okrug(1.75,1) - 1,8\r
\r
А .499 или .499999999999 это уже значения не играет - все-равно далее будет Int(,4999999)
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198157
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Виктор, если сделать 0.49, то весь интервал от 0.49 до 0.5 будет обрабатываться неправильно. Если 0.4999 - от соответственно от 0.4999 до 0.5. Возьми как пример не 1.75, а 1.494.
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198168
dave604
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виктор, при вызове

? okrug (1550,-2)

выдает

Код: plaintext
1.
Compile error:
Expected variable or procedure, not module 


Как я понимаю, он Акеc ругается на отсутсвие модуля. но модуль okrug в МОДУЛЯХ у меня есть.
Может при создании его я что-то пропустил, делал по следующей схеме:
1 - в МОДУЛЯХ нажал СОЗДАТЬ, открылось окно VB, куда я внес сам код
2 - нажал на сохранить. Сохранил как okrug.
3 - в окошке МОДУЛИ базы появился модель okrug.
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198170
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Expected variable or procedure, not module

Оно кричит на то, что модуль называется так же, как функция.
...
Рейтинг: 0 / 0
Округление данных в таблице
    #32198173
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIG, thanx. Только без abs было лучше
да..., что то я перемудрил. Жара...
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Округление данных в таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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