|
|
|
| В глобальном модуле
Public Function OKR_BES() As Integer 'округление веса до знака
OKR_BES = DLookup("[OKR_BES]", "[MOL]", "") ' где [OKR_BES]- поле в таблице значений установленных пользователем по умолчанию
End Function
Public Function OKR_SUM() As Integer 'округление суммы до знака
OKR_SUM = DLookup("[OKR_SUM]", "[MOL]", "")
End Function
В формах ..запросах...отчетах....примерно так :
Me![суммаоплачено] = Round([количество] * [цена ед], OKR_SUM)
.......
Работало несколько дней. Теперь не хочет...Пишет что нет таких функций...
что неоднозначная функция OKR_SUM....ругается компилятор...
Вообщем, буду рада любой подсказке . Спасибо. | |
|
| |
|
|
|
| ...нашла ошибочку.....а сообщение как удалить не нашла | |
|
| |
|
|
|
|
| Может это поможет округлять или я что-то не так понял.
Function Int_Num(n1 As Double, n2 As Integer)
'n1 - округляемое число
'n2 - на сколько знаков
Int_Num = Int(n1 * 10 * n2) / (10 * n2)
End Function
|
| |
|
| |
|
|
|
| Round - функция округления, у нее настройки юзера до какого знака окрулять | |
|
| |
|
|
|
| У акса бывает некорректное округление.
Особенно это прявляется в документах типа счета, когда округляется сумма по строке.
Бывает, что сумма сумм по строке (SUM()) не совпадает с реальной суммой.
Округлять можно, например так:
Public Function DRound(AnyValue As Variant, DecNumb As Integer)
DRound = Int(AnyValue * 10 ^ DecNumb + 0.5) / 10 ^ DecNumb
End Function
|
А вот классика от Кена Гетца
Public Function Round( _
ByVal Number As Variant, NumDigits As Long, _
Optional UseBankersRounding As Boolean = False) 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
' Now round to nearest even, if necessary.
If UseBankersRounding Then
If Int(varTemp) = varTemp Then
' You could also use:
' varTemp = varTemp + (varTemp Mod 2 = 1)
' instead of the next If ...Then statement,
' but I hate counting on TRue == -1 in code.
If varTemp Mod 2 = 1 Then
varTemp = varTemp - 1
End If
End If
End If
' Finish the calculation.
Round = intSgn * Int(varTemp) / dblPower
End Function
| | |
|
| |
|
|
|
| а кто мешает сделать Sum(Round())
- Мойша сколько будет дважды два?
- А мы продаем или покупаем? | |
|
| |
|
|
|
| Иногда не помогает. Впрочем, никто ведь не заставляет...
Вот пример обсуждения
http://hiprog.com/forum/read.php?id_forum=1&id_theme=1543&page=1
http://hiprog.com/forum/read.php?id_forum=1&id_theme=3232&page=1
http://www.sql.ru/forum/actualthread.aspx?bid=4&tid=31080&pg=-1
и т.д.
в общем, проблема есть | |
|
| |
|
26 Кб. |
|
| попробывал round в екселе
результатами был удивлен => | |
|
| |
|
|
|
| Во во | |
|
| |
|
77 Кб. |
|
| Проблема в том, что Round у меня почему то не во всех модулях и формах видит аргумент до какого знака округлять(у меня он фукция глобальная OKR_SUM)
Хотелось сделать с возможностью в таблице изменять этот параметр....потому как сегодня окугляем до целых, а завтра может копейки считать будем.
Причем в некоторых формах и модулях Round этот аргумент видит и понимает. а в некоторых нет.
Набросала пример для наглядности.
В нем то как раз все и работает.
Писать свою функцию округления не очень то хотелось, вполне устраивает ROUND,
в ней баковское округление.
Спасибо за ссылки и подсказки, буду пробовать.. | |
|
| |