Sprawa jest dość skomplikowana, liczę kwotę narzutu, na którą składa się mnożenie kilku różnych wartości. Wyniki wychodzą różne, od 1 do 8 miejsc po przecinku, to jest raczej ok, bo nie mam na to wpływu (tak liczy aplikacja). Potrzebuje, aby zestawienie które tworze, zaokrąglało wyniki do 2 miejsc po przecinku i dawało takie same wyniki, jak ta aplikacja. Problem prawie udało się rozwiązać, niestety są różnice 0,01 lub 0,02, które są niedopuszczalne. Dla przykładu:
944,90928 -> powinno zwracać 944,91 - OK
2651,85158664 -> powinno zwracać 2651,85 zwraca 2651,87
15572,36465748 -> powinno zwracać 15572,44 zwraca 15572,42
Każda z powstałych liczb jest sumą kilku wpisów, różnej ilości dla każdej z nich. Rozwiązuje w tej chwili sprawę odrębną funkcją, lecz jak widać wyniki bardzo nieznacznie są inne od oczekiwanych.
ALTER FUNCTION [dbo].[fn_zaokraglanie_arytm]
(
@kwota float
)
RETURNS float
AS
BEGIN
RETURN CASE WHEN (cast((@kwota * 10000)/10 as int)%10)=5
THEN Floor(@kwota * 100)/100+0.01
ELSE ROUND(@kwota,2)
END
-- Return the result of the function
RETURN round(@kwota,2)
END
Przez funkcję przechodzi każda z sumowanych na końcu kwot.