А эта старая Okr чем-нибудь отличается от встроенной Round()? Попробуй
Sub testround()
Dim curPrice As Currency
Dim curQty As Currency
Dim curSum As Currency
curPrice = 101.5
curQty = 37.07
curSum = curPrice * curQty
Debug.Print curSum; Round(curSum, 2)
curSum = curSum * 2
Debug.Print curSum; Round(curSum, 1)
'3762,605=3762,6*2=7525,2
End Sub
|
И ты пробовал скульную ф-цию Round?
--
Regards
Alexander Artamonov
"User_06" <nospam@sql.ru> сообщил/сообщила в новостях следующее:
news:1915402@sql.ru...
В mdb округлялкой работала следующая функция (не моя, исторически
сложилось):
Public Function Okr(Ch) As Currency
Ch = Nz(Ch, 0)
Okr = CCur(Ch / 100) * 100
End Function
Перехожу на adp. В запросах нужно писать аналогичную ф-ию для SQL
(внимание - цель не соорудить более "правильную" функцию. Основная цель -
чтобы цифры в "новой" программе максимально точно соответствовали цифрам
"старой". Т.е. нужен полный аналог, работающий по тем же принципам). В SQL
пока не особо силен. Попытался соорудить нечто вроде:
ALTER FUNCTION dbo.Okr
(@Ch float)
RETURNS money
AS
BEGIN
RETURN
isnull(convert(money, @Ch/100)*100,0)
END
Посмотрел - разница при подсчете сумм все равно имеется. В итого наиболее
приближенные результаты получил с помощью след. функции:
ALTER FUNCTION dbo.Okr
(@Ch float)
RETURNS money
AS
BEGIN
RETURN
isnull(round(@Ch,2),0)
END
Но все равно полной идентичности достичь не удается. Проблема в том, что в
формах в строках работает старая функция, а в запросах, где подсчитываются
суммы - новая. Один пример.
1-я позиция 101,50
2-я позиция 101,50
Сумма - 203,00
Курс - 37,07
Старая функция округляет в меньшую сторону:
101,5*37,07=3762,605=3762,6*2=7525,2
Новая (которая используется при подсчете суммы) в большую -
101,5*37,07=3762,605=3762,61*2=7525,22
В итоге по строкам (где используется старая функция) должно быть 7525,2.
А получается же 7525,22 , т.е. на 2 коп. больше.
Вообще есть возможность сделать так, чтобы новая функция работала
полностью идентично старой?
Тема Ответить
Posted via ActualForum NNTP Server 1.3