Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: 2003 Не получается округлять...
 
 автор: Надежда_С   (10.07.2012 в 22:38)   личное сообщение
 
 

В глобальном модуле
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....ругается компилятор...
Вообщем, буду рада любой подсказке . Спасибо.

  Ответить  
 
 автор: Надежда_С   (11.07.2012 в 02:18)   личное сообщение
 
 

...нашла ошибочку.....а сообщение как удалить не нашла

  Ответить  
 
 автор: Гоблин   (11.07.2012 в 12:07)   личное сообщение
 
 

  Ответить  
 
 автор: oper533234   (11.07.2012 в 19:24)   личное сообщение
 
 

Может это поможет округлять или я что-то не так понял.

Function Int_Num(n1 As Double, n2 As Integer)
'n1 - округляемое число
'n2 - на сколько знаков
    Int_Num = Int(n1 * 10 * n2) / (10 * n2)
End Function

  Ответить  
 
 автор: kot_k_k   (12.07.2012 в 09:27)   личное сообщение
 
 

Round - функция округления, у нее настройки юзера до какого знака окрулять

  Ответить  
 
 автор: Дядя Федор   (12.07.2012 в 11:25)   личное сообщение
 
 

У акса бывает некорректное округление.
Особенно это прявляется в документах типа счета, когда округляется сумма по строке.
Бывает, что сумма сумм по строке (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

  Ответить  
 
 автор: kot_k_k   (12.07.2012 в 11:35)   личное сообщение
 
 

а кто мешает сделать Sum(Round())

- Мойша сколько будет дважды два?
- А мы продаем или покупаем?

  Ответить  
 
 автор: Дядя Федор   (12.07.2012 в 11:54)   личное сообщение
 
 

Иногда не помогает. Впрочем, никто ведь не заставляет...

Вот пример обсуждения

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


и т.д.
в общем, проблема есть

  Ответить  
 
 автор: snipe   (12.07.2012 в 12:15)   личное сообщение
26 Кб.
 
 

попробывал round в екселе
результатами был удивлен =>

  Ответить  
 
 автор: Дядя Федор   (12.07.2012 в 12:37)   личное сообщение
 
 

Во во

  Ответить  
 
 автор: Надежда_С   (13.07.2012 в 04:07)   личное сообщение
77 Кб.
 
 

Проблема в том, что Round у меня почему то не во всех модулях и формах видит аргумент до какого знака округлять(у меня он фукция глобальная OKR_SUM)
Хотелось сделать с возможностью в таблице изменять этот параметр....потому как сегодня окугляем до целых, а завтра может копейки считать будем.
Причем в некоторых формах и модулях Round этот аргумент видит и понимает. а в некоторых нет.
Набросала пример для наглядности.
В нем то как раз все и работает.
Писать свою функцию округления не очень то хотелось, вполне устраивает ROUND,
в ней баковское округление.
Спасибо за ссылки и подсказки, буду пробовать..

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList