|
|
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Парни, ситуация такая. 1. Надо округлять данные в запросах до целых чисел, причем в идеале должно округляться таким образом. что бы например если стоит 1,1 округлять до 2. 2. Если ставишь в свойстве поля запроса Формат поля -> Фиксированный -> Число десятичных знаков = 0 то значение в этом поле при просмотре Запроса показывается как округленное до целого, но в других запросах, берущих данные из этого запроса, это значение не округленное. Также в отчете по этому запросу печатается не округленное значение. Т.е. например, если значение выходит 1.55 то при просмотре Запроса оно 2, но в других запросах оно снова 1.55 и в отчете оно 1.55. Вопрос: Можно решить эти проблемы, не прибегая к програмированию, используя стандартные средства Access Если все таки нужно програмировать,поделитесь строчками кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 12:57 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
см. здесь /topic/31080 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 13:11 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Парни, стуация такая. что я полный чайник в програмировании в MSA я сисадмин и надо очень быстро сделать базу данных под ACCEESS Все что в моих силах, я сделал,базу с помощью визуальных средств MSA и небольших запросах, но вот эта проблема - ОКРУГЛЕНИЕ ЧИСЕЛ В ЗАПРОСАХ мне уже все мозги заканопатила, а время идет. ГУРУ MSA, если вам не будет в лом, напишите ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ, как можно добавить КОД В ЗАПРОС? Как вообще решить эту проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 13:55 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
А я программист на Акесе, и мне надо быстро поднять контролер домена и развернуть IIS. В запросе (если у тебя акес2000/2002) используй функцию Round(ИмяПоляЗапроса, Точность) Select Round(Pole1,2) From Table1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 14:01 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Уважаемый Senin Viktor. Подскажите пож-та недоумку, как вставить эту функцию в запрос? куда нажать, за что дернуть и etc ... Есть запрос и есть в запросе ПОЛЕ, куда я написал формулу. Нить: IIf([Гориз]![Шир]<130;2*([Гориз]![Шир]/100)+4*([Гориз]![Выс]/100);4*([Гориз]![Шир]/100)+8*([Гориз]![Выс]/100))+([Гориз]![Нить]/100) Теперь надо, что бы значение в этом ПОЛЕ на выходе округлялось. Виктор, я понимаю, что вопрос для вас тупой и не заслуживающий даже того, что бы ответить, но уж так приспичило, что прям вой =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 16:58 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Виктор только не забудь сказать КАК округляет твоя функция round() поскольку дисскусия уже была по этом поводу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:06 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
>но уж так приспичило, что прям вой Ну если ТАК приспичело, что же ты свой топик бросил на 4 часа-то? Например, с точностью до 3 знаков: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:09 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Хам А я и не забыл см. топик от 13:11. Узнаешь? К тому же dave604 вроде Инженер - для него будет привычно способ округления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:11 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Виктор, спасибо! Дай бог те денег побольше! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:21 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
>Дай бог те денег побольше! Вот толковое "Спасибо", его бы еще обналичить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:25 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Виктор, позвольте быть до конца наглым и спросить Вас, а как можно округлить до большего данное поле? Например, получаеся 1.3 а надо на выходе иметь 2? Можно ли это сделать с помощью Round ??? По ссылке есть от 13:11 есть что то подобное в виде ФУНКЦИЙ, но я, к моему огромному стыду, не знаю, куда и как вставлять эти функции в запросе. Как всегда по возможности подробный алгоритм для тупых =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:37 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Нашел вот это, утверждается, что округляет до большего Function MyRound(n,p) pow=10^p MyRound=-int(-n*pow)/pow End Function Правильно ли это и если да, то как это применимо именно к моему случаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:40 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Лично я использую Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Например, ? 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:54 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Ок, спасибо, завтра попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 17:55 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Виктор, привет. Короче, смотри. 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. 2 - написал в запросе формулу Код: plaintext Access при выполнении запроса выдает Код: plaintext Виктор, в чем может быть дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 09:52 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
>в чем может быть дело? В том что данной функции для Акеса нет . Ты создал модуль в той же базе, где и запрос. Откомпилировал и сохранил. Функция объявлена как Public - все должно работать. Попробуй в Immediate окне (Ctrl+G) в модуле набрать ? okrug (25555.555, 0) и нажать ввод - если выдаст значение, то все нормально и в запросе эта функция тоже должна работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 10:38 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Господа, прошу многа-многа прощения, но почему 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" можно сыграть для округления вверх. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 10:50 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Вот-вот что то типа iif(number<0,int(number),int(number)+1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 10:58 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
sorry,конечно iif(number<0,abs(int(number)),int(number)+1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:00 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
VIG, thanx. Только без abs было лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:05 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
>Господа, прошу многа-многа прощения, но почему 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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:16 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Виктор, если сделать 0.49, то весь интервал от 0.49 до 0.5 будет обрабатываться неправильно. Если 0.4999 - от соответственно от 0.4999 до 0.5. Возьми как пример не 1.75, а 1.494. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:22 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Виктор, при вызове ? okrug (1550,-2) выдает Код: plaintext 1. Как я понимаю, он Акеc ругается на отсутсвие модуля. но модуль okrug в МОДУЛЯХ у меня есть. Может при создании его я что-то пропустил, делал по следующей схеме: 1 - в МОДУЛЯХ нажал СОЗДАТЬ, открылось окно VB, куда я внес сам код 2 - нажал на сохранить. Сохранил как okrug. 3 - в окошке МОДУЛИ базы появился модель okrug. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:26 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
> Expected variable or procedure, not module Оно кричит на то, что модуль называется так же, как функция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:27 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
VIG, thanx. Только без abs было лучше да..., что то я перемудрил. Жара... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:29 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Саныч >Виктор, если сделать 0.49, то весь интервал от 0.49 до 0.5 будет обрабатываться неправильно. Почему же? Все работает нормально. Ты алгоритм посмотри varTemp = CDec(Number) * dblPower + 0.5 (0,49) а потом Int(varTemp) >Возьми как пример не 1.75, а 1.494. Беру ? okrug(1.494,2) При 0,49 - 1,49 При 0,499999 - 1,49 При 0,50 - 1,49 Все правильно. Беру ? okrug(1.494,1) При 0,49 - 1,5 При 0,499999 - 1,5 При 0,50 - 1,5 Все правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:34 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
ТОЧНО!!! Саныч - РЕСПЕКТ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:35 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Виктор, а если поставить в программе не 0.49, а 0.3 или 0.8? Может, оно вообще ни на что не влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:41 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
>а если поставить в программе не 0.49, а 0.3 или 0.8? Может, оно вообще ни на что не влияет? Оно нужно только как некое правило округления чисел, оканчивающихся на 5. Кто считает что ему нужно вменьшую сторону - ставит ,049 Кто считает что ему нужно в большую - ставит - 0,5 Кто считает что ему надо по "правилам" - использут Round, правда тогда надо забыть о таком округлении Round (9999,-1)=10000 Вообще в том топике про округление проскаивала мысль сделать универсальную функцию, передавая в параметрах правило округления (или использовать глобальные натсройки программы). Это будет самый правильный подход. По-умолчанию сделать использование Round - и как самой быстрой и так самой "правильной". Но не забыть про консультироваться по правилам округления у бухгалтера - и лучше письмено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:48 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
> Оно нужно только как некое правило округления чисел, оканчивающихся на 5. Когда оно сидит в программе, оно не знает, для чего оно нужно. Там нет ифа "если кончается на 5". Через эту строку программы проходят все числа. Поэтому я и предлагаю проверить, как программа будет работать (с разными числами), если заменить 0.49 на другое число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 11:56 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Поправлю сам себя (не по сути, а по примеру). Неправильно обрабатывается интервал от 0.5 до 0.51. Короче, надо попробовать взять эту функцию от 0.505, и сразу будет видно, что 0.49 - это баг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 15:42 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Я что-то сегодня туплю... Где баг, Саныч ? okrug(0.505,1) при +0,49/+0,5 вернет 0,5 - что правильно. 0,505 - (0,50/0,51) - 0,5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 15:56 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Здорово Я здесь прописался недавно. Может я и опоздал со своими советами. Простейший способ округлить до 2х знаков после запятой: Результат = CCur(Format(Выражение, "0.00")) , но работает эта конструкция довольно медленно, вот пара вариантов побыстрее. Public Function Okrug(s As Variant, Optional m As Byte = 2) As Double 'Округляет аргумент от 0 до m знаков после запятой ' при возникновении ошибки возвращает НОЛЬ On Error GoTo OkrugErr Dim n As Long, d As String d = String(m, "0") n = Val("1" & d) If s * n - Int(s * n) < 0.5 Then Okrug = Int(s * n) / n Else Okrug = (Int(s * n) + 1) / n End If Exit Function OkrugErr: 'Метка обработчика ошибок Okrug = 0 Err.Clear End Function а вот вариант округления только до ДВУХ знаков - зато работает в трое быстрее Public Function RoundTwo(s As Variant) As Currency 'Округлят аргумент до двух знаков после запятой ' при возникновении ошибки возвращает НОЛЬ Dim x As Long On Error GoTo RoundTwoErr x = Int(s * 100) If s * 100 - x < 0.5 Then RoundTwo = CCur(x / 100) Else RoundTwo = CCur((x + 1) / 100) End If Exit Function RoundTwoErr: 'Метка обработчика ошибок RoundTwo = 0 Err.Clear End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:08 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Predator Переименуйся в Plagiator. если конечно ты не Сергей Оркин. http://msa.polarcom.ru/st/d_1000502.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:12 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Немерянная круть Я всегда чуть не плачу когда вижу, как люди домножают что-то на степени 10 следующим образом. Код: plaintext 1. 2. Круче этого только Код: plaintext Честное слово, я это не сам придумал. В исходниках драйвера к кассовому аппарату видел Код: plaintext Видимо на 100 делили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:15 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Лоху >chislo = chislo & "e-2" Это ты нам уже постил :) Ты по делу скажи - где в приведенной мной (02 июля 17:54) функции баг? Саныч не откликается - выдохся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:20 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Ну получай Код: plaintext 1. А должно быть 2 Саныч так и написал Неправильно обрабатывается интервал от 0.5 до 0.51 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:28 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Predator Ты не обижайся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:28 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Лоху >? okrug(1.509,0)=1 >А должно быть 2 все - нашел -понял -спасибо тебе и Санычу. Если использовать вместо 0,49 -> 0.499999999999999 то будет все нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:38 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Не будет Код: plaintext 1. А должно быть 1е-15 P.S. И не говори что я зануда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:46 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
т.е. наоборот будет 1е-15, а должно быть 2е-15 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:50 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Какой хитрый :) Тогда так (вместо 0,4999999) varTemp = CDec(Number) * dblPower + CDec(0.5 - 1E-308) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 17:08 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Думаешь будет работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 17:22 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Будет и для ? okrug(1.509e-28,28) Но не больше/меньше 28 знаков тогда делаем varTemp = CDec(Number) * dblPower + CDec(0.5 - 1E-29) Кстати. Round работает только до 22 знаков ? round(1.509e-22,22) т.е. самопальная функция круче в 1 000 000 раз :) З,Ы. Во ху%ня получилась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 17:38 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Лоху спасибо за поддержку и за энергию, потраченную вместо меня. Я тебе должен много енотов. Слушай, меняй ник. Виктору: я не выдохся, я сегодня в отпуске, а дома Интернет платный. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 17:40 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Ну, а если сделать varTemp = CDbl(Number) * dblPower + CDbl(0.5 - 1E-308) то можно и с точностью до 308 знака :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 17:52 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
А кто возьмется это всё по округлению преобразоватьв FAQ? уже 2 топика посвятили этому.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 09:16 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
Только этот фак надо не в раздел "Аксесс", а в раздел "здравый смысл" или "математика за 1 класс". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 14:14 |
|
||
|
Округление данных в таблице
|
|||
|---|---|---|---|
|
#18+
2Саныч\r \r >а в раздел "здравый смысл" или "математика за 1 класс".\r \r Не знаю как у вас, у нас налоговый инспектор может и не знать о правилах округления и из-за расхождения в несколько копеек развернуть бухгалтера назад или штрафануть (им тоже план выполнять надо). В некоторых отчетах требуется "округлени" путем отбрасывания дробной части (1 руб 99к = 1 руб)\r В главном топике это расписывалось. \r Вывод можно сделать один: дать бухгалтеру самому определять правила округления. \r ======\r "Умом Россию не понять..." (с) кто-то умный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2003, 14:23 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1680722]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
94ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 459ms |

| 0 / 0 |
