Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft Access |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 вперед Ctrl→ все |
бух Member Откуда: Ильичевск Сообщений: 15 |
какие св-ва поля в форме нужно задать, или какую ф-ю использовать, чтобы числовое значение этого поля действительно имело не более 2-х знаков после запятой???? |
6 май 03, 16:21 [191662] Ответить | Цитировать Сообщить модератору |
АлексейК Member Откуда: http://www.msdatabase.ru , Moscow Сообщений: 7683 |
функция round (<XX,XXXX> ,2) |
6 май 03, 16:30 [191689] Ответить | Цитировать Сообщить модератору |
Хам трамвайный Member Откуда: Сообщений: 879 |
Алексею
?round(0.585,2)=0.58 как объяснить? |
6 май 03, 17:04 [191739] Ответить | Цитировать Сообщить модератору |
Хам трамвайный Member Откуда: Сообщений: 879 |
я на первый раз
предложу вот так format(0.584,"0.00") |
6 май 03, 17:08 [191748] Ответить | Цитировать Сообщить модератору |
Senin Viktor Member Откуда: Подмосковье Сообщений: 5006 |
Либо использовать Действительное число (при проектировании таблиц) с соответсвующими значениями целой и дробной части, но это только в Акесе2000/2002 |
6 май 03, 17:09 [191751] Ответить | Цитировать Сообщить модератору |
Лох Позорный 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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Senin Viktor Member Откуда: Подмосковье Сообщений: 5006 |
апаздал |
6 май 03, 17:28 [191778] Ответить | Цитировать Сообщить модератору |
Лох Позорный Member Откуда: Сообщений: 9898 |
Поправочка
0.5 - округляется до ближайшего четного |
6 май 03, 17:29 [191779] Ответить | Цитировать Сообщить модератору |
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 - то в большую. Производительность, у этой функции конечно ниже.
|
||
6 май 03, 17:51 [191812] Ответить | Цитировать Сообщить модератору |
Лох Позорный Member Откуда: Сообщений: 9898 |
А зачем? Потому что в школе научили, что 0.5 округляется вверх? Или потом еще где то научили что от 0.50 до 0.51 округляется вниз?
Надо просто поверить, что правильно 0.5 округлять до ближайшего четного :) Жить сразу станет проще. Максимум что придется сделать - объяснить это пользователям. Но не зря же этот метод назван "бухгалтерским" :) Если деньгосчеты с этим способом соглашаются - значит это закон :) |
6 май 03, 17:59 [191820] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Лох Позорный Member Откуда: Сообщений: 9898 |
Ну как хотите. Но аксес округляет более правильно. |
6 май 03, 18:19 [191852] Ответить | Цитировать Сообщить модератору |
-=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] Ответить | Цитировать Сообщить модератору |
вадя Member Откуда: Екатеринбург Сообщений: 18721 |
а так если что скажете?
Public Function округлить(ss As Variant, s As Integer) округлить = CLng(ss * 10 ^ s) / 10 ^ s End Function |
6 май 03, 21:59 [191978] Ответить | Цитировать Сообщить модератору |
Лох Позорный Member Откуда: Сообщений: 9898 |
пьян в говно но скажу - обосрется при больших s
chb tckb xnj yt nfr gmzy d ujdyj |
6 май 03, 23:32 [192012] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Лох Позорный Member Откуда: Сообщений: 9898 |
Насчет пользователей, которым невозможно что-либо объяснить.
А если такой польозватель не поймет что 2х2=4, будет утверждать что должно быть 4.5 - вы что, под него арифметику будете переписывать??? |
7 май 03, 09:00 [192095] Ответить | Цитировать Сообщить модератору |
Senin Viktor Member Откуда: Подмосковье Сообщений: 5006 |
2 -=Alexey=-
>абсолютно безосновательный наезд на MS 1.функия round округляет как положено, правила округления можно посмотреть в примечаниях к другим функциям округления, например цитата из хелпа по CInt Да еще бы они разяснения по округлению чиселе поместили в пример по функции вычисления тангеса. Идиоты (IMHO) А делать вывод о способах рабоыт одной функции (Round) на основании работы другой (CInt) - это странно. Все-таки хотелось бы видеть справку по округлению там, где описана функция округления То что функция округляет как положено (кстати кем? где можно прочесть/узреть правила бух. округления?) я не сомневаюсь, я теперь сомневаюсь в своих знаниях. >3. свои функции в данном случае, только дань общей неграмотности пользователей, которых в школе научили "простым правилам округления" Я, конечно, понимаю, что все что люди учили в школе надо забыть ибо МИКРОСОФТ так велела. Да? И как то странно ты делаешь вывод: "учили в школе" == "безграмотность". А где грамоте учат? В файлах *.hlp и *.chm? Подвожу краткий итог для самого себя: После того как найду _документ_, подтверждающий правила округления, буду всегда использовать Round, но все же собственные функции округления имеют право на жизнь, в т.ч. в бух. прогах. З.Ы. Пошел искать слово округление в Гаранте... |
7 май 03, 09:10 [192102] Ответить | Цитировать Сообщить модератору |
Michael Vasilev Member Откуда: Москва Сообщений: 612 |
Про 2х2=4.5: это крайний нереальный случай.
Про равильное округление: когда я работал с бухгалтерией их не интересовало правильное математическое округление (или квантование результата), им нужно было чтобы 0.5 однозначно округлялось до единицы. И вероятно они правы, это упрощает процесс и нет нужды вычислять четное или нечетное число. Налоговая тоже помню требовала данные округлять до рублей, причем 50 коп. округлялось до 1 рубля, а не до 0 рублей. Впрочем если бы заказчик захотел по другому, то и делалось бы по другому. Про нарастание погрешности - мне думается и при квантовании округления абсолютной точности не добится, на то оно и округление. Да и смысл округления вероятно для удобства пользователя, округляется до ближайшего знака, точность которого удовлетворительна для задачи. Обычно округляется уже итоговый результат, а не все промежуточные. Больше по этой теме выдумать уже не могу. P.S. Числа с плавающей запятой хранятся тоже не с абсолютной точностью. |
7 май 03, 09:14 [192105] Ответить | Цитировать Сообщить модератору |
Лох Позорный Member Откуда: Сообщений: 9898 |
Да правил округления можно придумать сколько угодно. И использовать можно любое, главное чтобы заказчик доволе был
Можешь сказать, что все дробные числа округляются вниз. Ну такое вот у тебя округление, по просьбе пользователей например, никто же не запретит. Сумма округлений от округления суммы будет всегда в меньшую сторону отличаться, но это может быть и непринципиально для каких-то задач. Можешь округлять всегда вверх. Ошибка в другую сторону поползет. Можешь по школьным правилам. Тогда ошибка гуляет где-то в районе нуля, при этом в + немного чаще чем в - (за счет 0.5) Можешь квантовать. Тогда плотность вероятности максимальна в нуле. Это не значит что ошибка всегда нулевая (так не бывает, это же округление), это значит что статистически ошибки будут друг друга компенсировать. Что и есть начало щастья на земле. На предыдущей работе ненакопление ошибки было важно даже не для бухгалтерии, а для директора фирмы. На мелкомяхк наезды безосновательны (за ислючением хелпа). Не хотите же вы чтобы вам все возможные способы округления реализовали?? |
7 май 03, 09:39 [192120] Ответить | Цитировать Сообщить модератору |
Senin Viktor Member Откуда: Подмосковье Сообщений: 5006 |
Все что полезного нашел в Гаранте...
А вот из журнала "Главбух"
Такие же "простые правила округления" действуют и для Расчета единого социального налога, и для таможни и еще кучи нормат. актов. Вопрос: ГДЕ В НАШЕМ ЗАКОНОДАТЕЛЬСТВЕ ЕСТЬ ОКРУГЛЕНИЕ ДО БЛИЖАЙШЕГО ЧЕТНОГО? |
||||||
7 май 03, 09:49 [192127] Ответить | Цитировать Сообщить модератору |
вадя Member Откуда: Екатеринбург Сообщений: 18721 |
округять можно как угодно
как правило округление нужно для бухгалтерии ндс тому подобное. попробуйте некоторым бухгалтерам объяснить разницу "ндс в сумме" и "ндс сверху" если к тому же уних проги понимают только один вариант, а кокой эти бухги самине знают. так что нода в запасе иметь разные методы окруления, оквадрачивания ... тады будет лекче жить хошь синию полосу, хошь красную.... |
7 май 03, 09:54 [192131] Ответить | Цитировать Сообщить модератору |
Senin Viktor Member Откуда: Подмосковье Сообщений: 5006 |
Таки нашел про округление по правилу четного...
Итог: Остается брать у руководства под расписку правила округления для разрабатываемой программы - и пусть сами потом расхлебывают. |
||
7 май 03, 10:00 [192141] Ответить | Цитировать Сообщить модератору |
вадя 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 | ![]() |