niepoprawne liczenie części dziesiętnych i setnych

Użytkowanie arkusza kalkulacyjnego
Kierkola
Posty: 3
Rejestracja: pt mar 02, 2018 12:02 pm

niepoprawne liczenie części dziesiętnych i setnych

Post autor: Kierkola »

Proszę o pomoc.
Chodzi o wyliczenie należności za wykonaną pracę. Jedna godzina to 15.13 zł
Liczę na kalkulatorze 60 godzin 29 minut po 15,13 zł wychodzi 915,11 a w arkuszu mi wylicza, że 915,21.
Robię tak: godziny mnożę przez 60 + ilość minut Otrzymuję ilość minut którą mnożę przez 15,13 i dzielę przez 60. Wynik różni się od tego policzonego na kalkulatorze
Każdy wynik w tabeli w częściach po przecinku zawiera błędy.
OpenOffice4.1.4 system operacyjny 8.1
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: niepoprawne liczenie części dziesiętnych i setnych

Post autor: Jan_J »

Pokaż swoje formuły. A jeszcze lepiej załącz arkusz, którego używasz do przeliczeń.

Arkusze kalkulacyjne mają do dyspozycji tylko jeden typ liczbowy: liczby zmiennopozycyjne podwójnej prezyzji, tzw. double. Wskutek tego nie ma gwarancji zgodności wyników obliczeń z "papierowymi" rachunkami. Ale błąd, jeśli się pojawia, będzie w okolicach 15 do 16 cyfry znaczącej. Jeśli się pojawia na 5 cyfrze, wina jest najczęściej po naszej stronie.

Arkusze kalkulacyjne mają też możliwość emulacji tzw. obliczeń stałopozycyjnych, za pomocą opcji [x] dokładność jak pokazano. Jeżeli jest włączona, wpływa na wynik niezależnie od sposobu zaprogramowania formuły. Stąd sugestia by dołączyć "felerny" skoroszyt, zamiast tylko opowiadać o użytej w nim metodzie.

Sprawdziłem w LibreOffice 5.4.x:
=60+29/60 daje wynik 60,48333333333330000000 (te zera na końcu do właśnie efekt błędu obcięcia)
natomiast =(60+29/60)*15,13 daje 915,11283333333300000000 (z zastrzeżeniem jak wyżej).
Na pewno nie jest to 915,21.

Jeżeli czynniki będą przechowywane w osobnych komórkach z ograniczoną precyzją wyświetlania, to przy opcji [x] dokładność jak pokazano wyniki mogą być inne -- jednak dzieje się to na życzenie użytkownika.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Kierkola
Posty: 3
Rejestracja: pt mar 02, 2018 12:02 pm

Re: niepoprawne liczenie części dziesiętnych i setnych

Post autor: Kierkola »

Rzeczywiście wpisuję w osobnych komórkach dane.
A czy mogę prosić o wskazówkę, jak to poprawić?
Załączniki
dodatki.ods
(12.1 KiB) Pobrany 136 razy
OpenOffice4.1.4 system operacyjny 8.1
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: niepoprawne liczenie części dziesiętnych i setnych

Post autor: Jan_J »

Nie ma błędu w obliczeniach.
Komórka E7 zawiera wartość 15,1315789473684 a nie 15,13
więc wynik 915,208333333332 w przybliżeniu 915,21 jest poprawny

Równoważne rachunki w kalkulatorze Pythona:

Kod: Zaznacz cały

>>> 15.1315789473684*3629/60
915.208333333332
>>> 15.13*3629/60
915.1128333333334
>>>
Problem wynika stąd, że pamiętana liczba ma dłuższą część dziesiętną niż pokazuje wyświetlacz.

Jak sobie poradzić?

Albo
zastanów się nad liczbą miejsc dziesiętnych jakie chcesz mieć w poszczególnych kolumnach i włącz narzędzia/opcje/calc/oblicz/[x] dokładność jak pokazano.

Albo
zaakceptować, że za godzinę roboty przysługuje kwota liczona dokładniej niż do grosza. W kantorach ceny kupna i sprzedaży są wyliczane z większą dokładnością, niż da się zrealizować przy małych kwotach.

Trzeba się zastanowić, na czym Ci bardziej zależy.

Podam prostszy przykład. Dzielimy stówę na 3 równe części. Wiem, nie da się. Więc ile to jest 100/3?
w wariancie 1. 100/3 = 33,33; ale 33,33*3 = 99,99 [zonk, gdzie jest 1 grosz?]
w wariancie 2. 100/3 = 33,3333333333333000000 (tak!, raz że te zera w miejscu trójek, a dwa, że nie da się zapłacić takiej kwoty) i wtedy 33,3333333333333000000*3 = 100,00 (znów tak!, zgodziło mimo zer w rozwinięciu niby-1/3; ale będą przypadki kiedy się nie zgodzi na 15 albo 16 cyfrze).
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: niepoprawne liczenie części dziesiętnych i setnych

Post autor: Jermor »

Można też wyrażenia z kolumny E umieścić wewnątrz funkcji ZAOKR(wyrażenie;2)
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Kierkola
Posty: 3
Rejestracja: pt mar 02, 2018 12:02 pm

Re: niepoprawne liczenie części dziesiętnych i setnych

Post autor: Kierkola »

Toż właśnie stąd wątek, że jak zaokrągliłam to mam różnice między tym co liczy arkusz a kalkulator. Ale skoro powiadacie, że tak być musi to niech musi.
Dziękuję za odpowiedzi.
OpenOffice4.1.4 system operacyjny 8.1
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: niepoprawne liczenie części dziesiętnych i setnych

Post autor: Jermor »

Jan_J wyjaśnił ci dlaczego takie zaokrąglenia się pojawiają. Wartości obliczane są zawsze z pełną dokładnością. Jeśli wpiszesz do dwóch komórek liczbę 2,44 a w trzeciej komórce je zsumujesz, zobaczysz wynik 4,88. Jeśli jednak sformatujesz te komórki do pokazywania tylko jednego miejsca po przecinku zobaczysz liczby 2,4 a wynik 4,9. Często tylko w ten sposób użytkownicy manipulują wyglądem liczb. A to oznacza, że prawdziwy wynik 4,88 aby pokazać go z jednym miejscem po przecinku musi być przedstawiony jako 4,9. Gdybyś jednak ten wynik pomnożyła w innej komórce np.przez 10, zobaczysz wartość 48,8.
Funkcja ZAOKR(wartość;n) zaokrągla podaną wartość do n miejsc po przecinku i tylko taką zaokrągloną przekazuje do dalszych obliczeń.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
ODPOWIEDZ