Grupy dyskusyjne Google nie obsługują już nowych postów ani subskrypcji z Usenetu. Treści historyczne nadal będą dostępne.

Zaokrąglanie liczb

5 wyświetleń
Przejdź do pierwszej nieodczytanej wiadomości

Grzegorz Godlewski

nieprzeczytany,
12 sty 1999, 03:00:0012.01.1999
do
W Accesie występuje fukcja konwesji liczb na liczby całkowite CLng.
Spróbowałem ją użyć do zaokrąglania liczb po przecinku np. do 2-giego
miejsca po przecinku. Wszystko działa poprawnie dopóki 3 cyfrą nie jest
5 a liczna nie jest liczbą nieparzystą. Wtedy występuje niepoprawne
zaokrąglenbie.O tym zresztą informuje help.

Czy można wykorzystać inno funkcję do zaokrągleń liczb matematycznie? Na
pewno wielu z was się z tym problemem spotkało próbując zaokrąglić
liczby np. w cenach do pełnych groszy. W Excelu ten problem nie
występuje. Funkcja zaokrąglająca działa poprawnie.

Problem ominełem, własną funkcję zaokrąglającą opartą na funkcjach
tekstowych. Ciekawy jestem czy są jednak prostrze rozwiązania

Grzegorz Godlewski


Jaroslaw Swiecicki

nieprzeczytany,
12 sty 1999, 03:00:0012.01.1999
do
Napisalem cos takiego - na ogol :-) dziala:
Function ROUND(NUMVAL As Double, POWER As Integer) As Double
ROUND = Int(10 ^ POWER * NUMVAL + 0.500001) / 10 ^ POWER
End Function
Pozdrawiam
Jarek Swiecicki
melog s.c. systemy i software

Grzegorz Godlewski wrote in message <369B84D2...@polbita.com.pl>...

Stanley P

nieprzeczytany,
12 sty 1999, 03:00:0012.01.1999
do
Grzegorz Godlewski wrote:

Eh, problem stary jak Access... No ale zdaje sie jeszcze na tej grupie
nie bylo (poprzednio na pl.comp.bazy-danych chyba z 1000 razy ;-)

> W Accesie występuje fukcja konwesji liczb na liczby całkowite CLng.

> Spróbowałem jš użyć do zaokršglania liczb po przecinku np. do 2-giego
> miejsca po przecinku. Wszystko działa poprawnie dopóki 3 cyfrš nie jest
> 5 a liczna nie jest liczbš nieparzystš. Wtedy występuje niepoprawne
> zaokršglenbie.O tym zresztš informuje help.

Wszystko to prawda. Ponadto CLng oferuje stosunkowo niski zakres liczb:
-2147483648 do 2147483647, czyli dopuszczalne (trzeba liczbe pomnozyc
*100...) bedzie -21474836,48 do 21474836,47. Co prawda prawie 21,5
miliona zl jest calkiem pokazna kwota, ale... ;-)

> Czy można wykorzystać inno funkcję do zaokršgleń liczb matematycznie?

Raczej finansowo, matematycznie dziala wlasnie CInt czy CLng. Tak,
napisac wlasna.

> Problem ominełem, własnš funkcję zaokršglajšcš opartš na funkcjach
> tekstowych. Ciekawy jestem czy sš jednak prostrze rozwišzania

Nie wiem jaka jest Twoja, ale znana nie tylko z accessa i zalecana przez
samego M$:

wynik = (liczba * 100 + 0,5) / 100

Z tym, ze w kodzie dziala poprawnie TYLKO na typie Currency. W polach
wyliczanych w zapytanich, formularzach, raportach, tylko jesli beda
obliczane bezposrednio z pol tabeli o tym typie. Jesli 'liczba' bedzie
zmiennoprzecinkowa, pojawiaja sie nieprzewidziane bledy (o czym M$
rowniez ostrzega). Zakres Currency:
-922337203685477,5808 do 922337203685477,5807, czyli przy uzyciu funkcji
do dyspozycji jest zakres
-9223372036854,77 do 9223372036854,77 (chyba powinno wystarczyc ;-)

Pozdrawiam -
Stanley

G. Rotecki

nieprzeczytany,
12 sty 1999, 03:00:0012.01.1999
do
Mam sklecone coś takiego, nie pamiętam niestety dlaczego tak kombinowałem,
ale też działa:

Function Round(Wart As Variant, lm As Integer) As Currency

Dim Całk As Currency
Dim i As Integer
Dim Koniec As Currency
Dim mnożna As Currency
Dim Wal As Currency
Dim Reszta As Currency
Dim iTmp1 As Currency

If Not IsNull(Wart) Then
Wal = Abs(CCur(Wart))
mnożna = 1
lm = lm - 1
For i = 0 To lm
mnożna = mnożna * 10
Next
Całk = Fix(Wal)
iTmp1 = Wal - Całk
Wal = iTmp1 * mnożna
Reszta = Fix(Wal) * 10
Koniec = Fix(Wal * 10) - Reszta
If Koniec >= 5 Then
Reszta = Fix(Wal * 10) + 5
End If
Round = Sgn(Wart) * (Całk + Fix(Reszta / 10) / mnożna)
Else
Round = 0
End If
End Function

Stanley P

nieprzeczytany,
13 sty 1999, 03:00:0013.01.1999
do
Stanley P wrote:

Ma byc oczywiscie:
>
> wynik = Int(liczba * 100 + 0,5) / 100

Stanley

Nowe wiadomości: 0