Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7   вперед  Ctrl      все
 округление  [new]
бух
Member

Откуда: Ильичевск
Сообщений: 15
какие св-ва поля в форме нужно задать, или какую ф-ю использовать, чтобы числовое значение этого поля действительно имело не более 2-х знаков после запятой????
6 май 03, 16:21    [191662]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
функция round (<XX,XXXX> ,2)
6 май 03, 16:30    [191689]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Хам трамвайный
Member

Откуда:
Сообщений: 879
Алексею
?round(0.585,2)=0.58
как объяснить?
6 май 03, 17:04    [191739]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Хам трамвайный
Member

Откуда:
Сообщений: 879
я на первый раз
предложу вот так
format(0.584,"0.00")
6 май 03, 17:08    [191748]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
Либо использовать Действительное число (при проектировании таблиц) с соответсвующими значениями целой и дробной части, но это только в Акесе2000/2002
6 май 03, 17:09    [191751]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
2 Хам

>?round(0.585,2)=0.58
как объяснить?

А еще
?CLng(0.5)
0
?CLng(1.5)
2
?CLng(2.5)
2

При округлении до любого знака .5 округляется до ближайшего целого. Это так называемое "бухгалтерское" округление. Что, в общем то, и с математической точки зрения оправдано - статистическая ошибка округления равна 0 (при округлении 0.5 всегда вверх - ошибка больше 0)
6 май 03, 17:24    [191772]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
2 Хам трамвайный

Извиняйте, что вмешиваюсь
но что тут удивительного ?round(0.5850,2)=0.58
До 0,50 включительно в меньшую сторону, от 0,51 в большую ?round(0.5851,2)=0.59
Выход:Либо писать собственную функцию округления либо смириться с таким правилом
6 май 03, 17:26    [191777]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
апаздал
6 май 03, 17:28    [191778]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Поправочка
0.5 - округляется до ближайшего четного
6 май 03, 17:29    [191779]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
>0.5 - округляется до ближайшего четного

Вот этого не знал :(
В итоге
? Round(1.575,2)
? Round(1.585,2)
Дает одно и тоже 1.58 %(


Бл%ди из микрософта могли бы в комментариях к Round расписать правила округления.

Теперь прийдется пользоваться "своей" функцией (не помню где надыбал, м.б. даже на этом форуме)

? okrug(1.575,2)=1.58
? okrug(1.585,2)=1.59

Зато можно управлять округлением, если поставить +0,49 - то в меньшую, если оставить как есть +0,5 - то в большую. Производительность, у этой функции конечно ниже.


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.5
okrug = intsgn * Int(varTemp) / dblPower

End Function
6 май 03, 17:51    [191812]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
А зачем? Потому что в школе научили, что 0.5 округляется вверх? Или потом еще где то научили что от 0.50 до 0.51 округляется вниз?
Надо просто поверить, что правильно 0.5 округлять до ближайшего четного :)
Жить сразу станет проще. Максимум что придется сделать - объяснить это пользователям. Но не зря же этот метод назван "бухгалтерским" :) Если деньгосчеты с этим способом соглашаются - значит это закон :)
6 май 03, 17:59    [191820]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Michael Vasilev
Member

Откуда: Москва
Сообщений: 612
Пользователям бывает невозможно объяснить.
Вот функция округления, взял из ФИДО давно когда то, не подводила пока, можно применять ее если понравится:

Public Function Rd(ByVal 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
' Raise an error indicating that you've supplied an invalid parameter.
err.Raise 5
End If
dblPower = 10 ^ NumDigits
' Is this a negative number, or not?
' intSgn will contain -1, 0, or 1.
intSgn = Sgn(Number)
Number = Abs(Number)

' Do the major calculation.
varTemp = CDec(Number) * dblPower + 0.5

' Finish the calculation.
Rd = intSgn * Int(varTemp) / dblPower
End Function
6 май 03, 18:17    [191848]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Ну как хотите. Но аксес округляет более правильно.
6 май 03, 18:19    [191852]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
-=Alexey=-
Member

Откуда:
Сообщений: 245
Сенину Виктору

абсолютно безосновательный наезд на MS
1.функия round округляет как положено, правила округления можно посмотреть в примечаниях к другим функциям округления, например цитата из хелпа по CInt

When the fractional part is exactly 0.5, CInt and CLng always round it to the nearest even number. For example, 0.5 rounds to 0, and 1.5 rounds to 2. CInt and CLng differ from the Fix and Int functions, which truncate, rather than round, the fractional part of a number. Also, Fix and Int always return a value of the same type as is passed in.

2. Очевидно, что если взять случайный набор чисел и круглять по вашим правилам, будет нарастающая ошибка, так как 0.5 одинакого близко и к 0 и к 1, естественно, что этот случай нужно квантовать, что и достигается по "нормальным" правилам округления

3. свои функции в данном случае, только дань общей неграмотности пользователей, которых в школе научили "простым правилам округления"

Лоху позорному
согласен с тобой :)
6 май 03, 20:04    [191939]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 18721
а так если что скажете?
Public Function округлить(ss As Variant, s As Integer)
округлить = CLng(ss * 10 ^ s) / 10 ^ s
End Function
6 май 03, 21:59    [191978]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
пьян в говно но скажу - обосрется при больших s
chb tckb xnj yt nfr gmzy d ujdyj
6 май 03, 23:32    [192012]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
wowa_ch
Member

Откуда:
Сообщений: 12
давно пользуюсь вот этой функцией и проблем не было
когда то нашел в инете

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
7 май 03, 07:47    [192068]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Насчет пользователей, которым невозможно что-либо объяснить.
А если такой польозватель не поймет что 2х2=4, будет утверждать что должно быть 4.5 - вы что, под него арифметику будете переписывать???
7 май 03, 09:00    [192095]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
2 -=Alexey=-
>абсолютно безосновательный наезд на MS
1.функия round округляет как положено, правила округления можно посмотреть в примечаниях к другим функциям округления, например цитата из хелпа по CInt

Да еще бы они разяснения по округлению чиселе поместили в пример по функции вычисления тангеса. Идиоты (IMHO) А делать вывод о способах рабоыт одной функции (Round) на основании работы другой (CInt) - это странно. Все-таки хотелось бы видеть справку по округлению там, где описана функция округления

То что функция округляет как положено (кстати кем? где можно прочесть/узреть правила бух. округления?) я не сомневаюсь, я теперь сомневаюсь в своих знаниях.

>3. свои функции в данном случае, только дань общей неграмотности пользователей, которых в школе научили "простым правилам округления"

Я, конечно, понимаю, что все что люди учили в школе надо забыть ибо МИКРОСОФТ так велела. Да? И как то странно ты делаешь вывод: "учили в школе" == "безграмотность". А где грамоте учат? В файлах *.hlp и *.chm?

Подвожу краткий итог для самого себя:
После того как найду _документ_, подтверждающий правила округления, буду всегда использовать Round, но все же собственные функции округления имеют право на жизнь, в т.ч. в бух. прогах.

З.Ы.
Пошел искать слово округление в Гаранте...
7 май 03, 09:10    [192102]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Michael Vasilev
Member

Откуда: Москва
Сообщений: 612
Про 2х2=4.5: это крайний нереальный случай.
Про равильное округление: когда я работал с бухгалтерией их не интересовало правильное математическое округление (или квантование результата), им нужно было чтобы 0.5 однозначно округлялось до единицы.
И вероятно они правы, это упрощает процесс и нет нужды вычислять четное или нечетное число. Налоговая тоже помню требовала данные округлять до рублей, причем 50 коп. округлялось до 1 рубля, а не до 0 рублей. Впрочем если бы заказчик захотел по другому, то и делалось бы по другому.
Про нарастание погрешности - мне думается и при квантовании округления абсолютной точности не добится, на то оно и округление. Да и смысл округления вероятно для удобства пользователя, округляется до ближайшего знака, точность которого удовлетворительна для задачи. Обычно округляется уже итоговый результат, а не все промежуточные.
Больше по этой теме выдумать уже не могу.

P.S. Числа с плавающей запятой хранятся тоже не с абсолютной точностью.
7 май 03, 09:14    [192105]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9898
Да правил округления можно придумать сколько угодно. И использовать можно любое, главное чтобы заказчик доволе был
Можешь сказать, что все дробные числа округляются вниз. Ну такое вот у тебя округление, по просьбе пользователей например, никто же не запретит.
Сумма округлений от округления суммы будет всегда в меньшую сторону отличаться, но это может быть и непринципиально для каких-то задач.
Можешь округлять всегда вверх. Ошибка в другую сторону поползет.
Можешь по школьным правилам. Тогда ошибка гуляет где-то в районе нуля, при этом в + немного чаще чем в - (за счет 0.5)
Можешь квантовать. Тогда плотность вероятности максимальна в нуле. Это не значит что ошибка всегда нулевая (так не бывает, это же округление), это значит что статистически ошибки будут друг друга компенсировать. Что и есть начало щастья на земле. На предыдущей работе ненакопление ошибки было важно даже не для бухгалтерии, а для директора фирмы.
На мелкомяхк наезды безосновательны (за ислючением хелпа). Не хотите же вы чтобы вам все возможные способы округления реализовали??
7 май 03, 09:39    [192120]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
Все что полезного нашел в Гаранте...


Налог на доходы физических лиц.
Налоговый кодекс.
Часть вторая.
Профессиональный комментарий (в соответствии с редакцией
Налогового кодекса РФ, ч.2 от 31 декабря 2001 г.)
Опубликовано в журнале "Налоги и финансовое право", 2002 г., N 5

Глава 8. Порядок исчисления и уплаты налога
1. Общие положения
...
При исчислении налога предусмотрены следующие правила округления. Сумма налога определяется в полных рублях. Сумма налога менее 50 копеек отбрасывается, а 50 копеек и более округляются до полного рубля.




Письмо Управления МНС по г. Москве от 5 мая 2000 г. N 02-11/17192

...сумма налога подлежит округлению до целого числа копеек в соответствии с математическими правилами округления до целого числа.




А вот из журнала "Главбух"


По данным бухгалтерского учета у нас получилась сумма НДС, подлежащая уплате в бюджет, с копейками - 1766 руб. 58 коп. Как нам указать эту сумму в налоговой декларации - с копейками или без них?

В соответствии с приказом МНС России от 27 августа 2001 г. N БГ-3-03/311 "О внесении изменений и дополнений в приказ МНС России от 27.11.2000 N БГ-3-03/407" все суммы в декларации по налогу на добавленную стоимость теперь указываются в рублях, без копеек.
Поэтому ваша организация должна использовать правила округления:
- суммы от 1 до 50 коп. включительно в расчет не принимаются;
- суммы от 51 до 99 коп. считаются за целый рубль.
Таким образом, вы должны указать в декларации сумму НДС без копеек - 1767 руб.

Н.С. Чамкина,
советник налоговой службы II ранга

15 ноября 2001 г.

"Главбух", N 22, ноябрь 2001 г.



Такие же "простые правила округления" действуют и для Расчета единого социального налога, и для таможни и еще кучи нормат. актов.

Вопрос: ГДЕ В НАШЕМ ЗАКОНОДАТЕЛЬСТВЕ ЕСТЬ ОКРУГЛЕНИЕ ДО БЛИЖАЙШЕГО ЧЕТНОГО?
7 май 03, 09:49    [192127]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 18721
округять можно как угодно
как правило округление нужно для бухгалтерии
ндс тому подобное. попробуйте некоторым бухгалтерам объяснить разницу "ндс в сумме" и "ндс сверху" если к тому же уних проги понимают только один вариант, а кокой эти бухги самине знают. так что нода в запасе иметь разные методы окруления, оквадрачивания ... тады будет лекче жить
хошь синию полосу, хошь красную....
7 май 03, 09:54    [192131]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
Таки нашел про округление по правилу четного...


Округление числа - замена его числом, представляющим его приближённо.
Округление производится постепенно справа налево по следующему правилу:
когда последняя значащая цифра а&#8804;4, она просто отбрасывается; когда а&#8805;6,
ближайшая слева от неё цифра увеличивается на единицу; когда a=5,
ближайшая слева от нее цифра увеличивается на единицу, если она
нечетная, или не изменяется, если она четная (правило четной цифры).

(С) Политехнический словарь, Москва, "Советская энциклопедия", 1989




Итог:
Остается брать у руководства под расписку правила округления для разрабатываемой программы - и пусть сами потом расхлебывают.
7 май 03, 10:00    [192141]     Ответить | Цитировать Сообщить модератору
 Re: округление  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 18721
2 Лоху
пьян в говно но скажу - обосрется при больших s chb tckb xnj yt nfr gmzy d ujdyj

глвное чтоб пр 2-4 было нормально . это достаточно для 99%

стоит MS почитать наши бух. законы , чтоб здилали спецфунк для наших
(хотя там наших достаточно. почему не отслеживают . ведь в наших школах их обучали округлять. проверку нашей орфографии сделали , а такую мелочь как округление забыли???)
7 май 03, 10:02    [192146]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить