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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

Правильно ли это и если да, то как это применимо именно к моему случаю?
...
Рейтинг: 0 / 0
02.07.2003, 17:54
    #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
02.07.2003, 17:55
    #32197667
dave604
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Округление данных в таблице
Ок, спасибо, завтра попробую.
...
Рейтинг: 0 / 0
03.07.2003, 09:52
    #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
03.07.2003, 10:38
    #32198078
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Округление данных в таблице
>в чем может быть дело?

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

Ты создал модуль в той же базе, где и запрос.
Откомпилировал и сохранил. Функция объявлена как Public - все должно работать.
Попробуй в Immediate окне (Ctrl+G) в модуле набрать
? okrug (25555.555, 0)
и нажать ввод - если выдаст значение, то все нормально и в запросе эта функция тоже должна работать.
...
Рейтинг: 0 / 0
03.07.2003, 10:50
    #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
03.07.2003, 10:58
    #32198109
VIG
VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Округление данных в таблице
Вот-вот
что то типа
iif(number<0,int(number),int(number)+1)
...
Рейтинг: 0 / 0
03.07.2003, 11:00
    #32198116
VIG
VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Округление данных в таблице
sorry,конечно
iif(number<0,abs(int(number)),int(number)+1)
...
Рейтинг: 0 / 0
03.07.2003, 11:05
    #32198122
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Округление данных в таблице
VIG, thanx. Только без abs было лучше.
...
Рейтинг: 0 / 0
03.07.2003, 11:16
    #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
03.07.2003, 11:22
    #32198157
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Округление данных в таблице
Виктор, если сделать 0.49, то весь интервал от 0.49 до 0.5 будет обрабатываться неправильно. Если 0.4999 - от соответственно от 0.4999 до 0.5. Возьми как пример не 1.75, а 1.494.
...
Рейтинг: 0 / 0
03.07.2003, 11:26
    #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
03.07.2003, 11:27
    #32198170
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Округление данных в таблице
> Expected variable or procedure, not module

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


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