Skocz do zawartości

[PHP] Liczenie kredytów/oszczędności


k0l3c

Rekomendowane odpowiedzi

Witam, piszę kalkulator (w tej chwili oszczędności) i mam problemy z rzetelnością liczb.

Pobieram 3 zmienne: Kwota, okres, oprocentowanie.

Kwota jest powiększana zawsze w tej samej wartości co miesiąc i ogólnie wygląda to np. tak:

beztytuunqo.png

Jak byście to najprościej napisali w PHP?

Ogólnie wzory są takie:

1-szy miesiąc = %miesieczny*kwota+kwota

kolejny miesiąc = (kwota*kolejny miesiąc)*%miesięczny+wcześniejszy miesiąc

penguins.jpg

Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Co to jest problem z rzetelnością liczb?

Jak byście to najprościej napisali w PHP?

Pętla for ($kwota = $kwotaPoczatkowa, $zysk=0; $okresow > 0; $okresow--, $kwota+=$kwotaPoczatkowa) z działaniem $zysk+=(($kwota=$kwota*(1+$procent)-$kwota), ale trzeba potestować ;)

Na emeryturze po SEO zajmuję się R&D.

Odnośnik do komentarza
Udostępnij na innych stronach

<?php
$kwotaPoczatkowa=100;
$okresow = 12;
$procent = 0.005;
for ($kwota = $kwotaPoczatkowa, $zysk=0, $i=0; $i<$okresow; $i++, $kwota+=$kwotaPoczatkowa) {
$zysk = ($kwota=($kwota*(1+$procent))) - ($i+1)*$kwotaPoczatkowa;
echo $kwota.' (zysk: '.$zysk.')<br />';
}
?>

Zwraca:

100.5 (zysk: 0.5)
201.5025 (zysk: 1.5025)
303.0100125 (zysk: 3.0100125)
405.025062562 (zysk: 5.0250625625)
507.550187875 (zysk: 7.55018787531)
610.587938815 (zysk: 10.5879388147)
714.140878509 (zysk: 14.1408785088)
818.211582901 (zysk: 18.2115829013)
922.802640816 (zysk: 22.8026408158)
1027.91665402 (zysk: 27.9166540199)
1133.55623729 (zysk: 33.55623729)
1239.72401848 (zysk: 39.7240184764)

Na emeryturze po SEO zajmuję się R&D.

Odnośnik do komentarza
Udostępnij na innych stronach

@Veal: :good:

ale.... trzeba pamiętać, że z rachunkami na liczbach zmiennoprzecinkowych nigdy nie jest łatwo :) A w PHP to już na pewno nie :)

@K0l3c: Do poczytania:

https://blog.cakper.net/157-nigdy-nie-ufaj-php/

https://floating-point-gui.de/basic/

https://www.php.net/manual/en/ref.bc.php

logo-stat4seo-blue-small.png

Odnośnik do komentarza
Udostępnij na innych stronach

A tutaj 2 linijki mniej ;)

$kwotaPoczatkowa=100;
$okresow = 12;
$procent = 0.005;

for ($kwota = $kwotaPoczatkowa*(1+$procent), $zysk=$kwota-$kwotaPoczatkowa, $i=0; $i<$okresow; $i++, $kwota+=$kwotaPoczatkowa, $zysk = ($kwota=($kwota*(1+$procent))) - ($i+1)*$kwotaPoczatkowa)
echo $kwota.' (zysk: '.$zysk.')<br />';

Na emeryturze po SEO zajmuję się R&D.

Odnośnik do komentarza
Udostępnij na innych stronach

na liczbach zmiennoprzecinkowych nigdy nie jest łatwo A w PHP to już na pewno nie
Wiec jakich funkcji dostępnych w innych jezykach brakuje by obsługiwać wydajnie / wygodnie tego typu operacje w PHP ?

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

@Mion: a czy ja gdzieś napisałem, że czegoś w PHP brakuję, lub coś jest nie wygodne ? Nie.

Napisałem jedynie, że nie jest tak łatwo, mając na myśli to, że w wielu przypadkach gdy mamy do czynienia z floatami nie możemy po prostu czerpać z logiki życia codziennego i napisać:

if( $a == $b ){}

czy

$a += $b;

bo może to nam dać ostatecznie wyniki odmienne od oczekiwanych.

Dla wielu początkujących osób nie jest to oczywiste stąd podałem link do strony która tłumaczy dlaczego tak się dzieję w świecie komputerów (na przykładzie wielu języków):

https://floating-point-gui.de/basic/

Napisałem, że "w PHP to już na pewno nie" bo ten język znam i wiem, że osoby początkujące mogą mieć z tym problemy

a - nie jestem w stanie powiedzieć, że w każdym języku programowania tak jest - z oczywistych powodów.

Ja nic PHP nie zarzucam - korzystam na co dzień i można powiedzieć, że dzięki znajomości tego języka się utrzymuję więc chill out :)

logo-stat4seo-blue-small.png

Odnośnik do komentarza
Udostępnij na innych stronach

@Mion: a czy ja gdzieś napisałem, że czegoś w PHP brakuję, lub coś jest nie wygodne ?
->
A w PHP to już na pewno nie

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Bo w PHP wiem, że na 100% tak jest jak opisałem w poprzednim poście :)

Być może są języki w których możemy bezpiecznie i bez żadnych wątpliwości porównywać/operować na float`ach bez użycia dodatkowych funkcji - tego NIE WIEM - pisałem to w dalszej części poprzedniego posta.

logo-stat4seo-blue-small.png

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności