Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: number_format i zaokrąglanie cen
Forum PHP.pl > Forum > PHP
LordRaven
Witam,
Wie ktoś może jak zrobić by ceny się nie zaokrąglały ? Bo na fakturze to nie za fajnie wygląda jak parę groszy jest mniej lub więcej.
Ma ktoś pomysł jak to najlepiej zrobić ?

Obecnie mam:
  1. number_format($cena, 2, ',', '.');


dzięki
ano
Eeee a jaśniej może? Jak mają się nie zaokrąglać skoro właśnie chcesz je "zaokrąglić" do dwóch miejsc po przecinku? To jak inaczej by to miało działać?
Chyba, że chodzi Ci o coś w tym stylu? wink.gif
  1. ((int) ($cena * 100)) / 100
LordRaven
np. mnożę 6,78 x 2 i mi wychodzi 13.55



ja bym chciał mieć "ładne: ceny typ: 54,13 zł, 4 920,00 zł z dokładnością co do grosika bo na fakturze to jest ważne, a obecnie dodaje lub zjada mi grosiki :/
Chciałbym po prostu robić operacje na liczbach i by się wyświetlały normalne ceny, a nie zaokrąglone + - 1 gr.

próbowałem

  1. ((int) ($cena * 100)) / 100


i wyszło 6.77 x2 13.55 :/
Uriziel01
Możesz po prostu zwiększyć dokładność do większej ilości miejsc po przecinku ale to wpłynie na estetykę wyświetlanych wyników. Możesz także mierzyć błąd pomiarowy a następnie:
1)Równomiernie rozkładać go pomiędzy wartości
2)Dodać jako poprawkę do wartości ostatniej.

Ale tak swoją drogą NIE ISTNIEJE fizyczna możliwość aby 'co do grosika' podzielić dowolne liczby na dowolną ilość części, przykład, masz 10 PLN, podziel tę kwotę równo pomiędzy 3 osoby.
LordRaven
Wszystko się dzieje przez te % jak odliczam vat od ceny brutto :/
A jest jakaś inna funkcja którą mogę użyć, podobna do number_format ? Chodzi mi ładne ceny pokazywała ale bez zaokrąglania, tak jak na dole, oczywiście musiała by usuwać ileś miejsc po przecinku, by ceny były "normalne".

  1. $vat = 22;
  2. $price = 16.78;
  3. $amount = 2;
  4.  
  5. $price2 = $price * $amount;
  6. $price_without_vat = ($price2 * $vat)/100;
  7. $p = $price - $price_without_vat;
  8.  
  9. echo $p;
  10. echo '<br>';
  11. echo number_format($p, 2, ',', '.');


Zwraca:

9.3968
9,40
sanneo
Użyj:

  1. sprintf('%01.2f', $twojaCena);
LordRaven
nie pomogło, tak samo zaokrągliło mi liczbę jak number_format, a chciałbym żeby się nie zaokrąglała, ewentualnie ucinała końcówka, ale znów to zależy od kwoty ile liczb od końca mu uciąć. A teraz na fakturze w cenie razem brakuje mi 10 gr bo z każdego produktu się troszkę tego uzbierało :/
mls
Bo kwoty zapisywać należy w groszach. Wtedy nic się nie zgubi, a przy wyświetlaniu trzeba tylko podzielić przez 100.
LordRaven
o coś takiego ci chodziło ?
  1. $vat = 22;
  2. $cena_brutto = "1060";
  3. $ilosc = 2;
  4.  
  5. $cena_razem = $cena_brutto * $ilosc;
  6. $sam_vat = ($cena_razem * $vat)/100;
  7. $cena_netto = $cena_razem - $sam_vat;
  8.  
  9. echo sprintf('%01.2f', $cena_netto/100);
darko
W tematach z fakturami i cyferkami zawsze używaj funkcji z rodziny bcmath operujących na liczbach o dużej precyzji:
  1. echo bcmul(2, 6.78, 2);


  1. // edit added:
  2. $vat = 22;
  3. $price = 16.78;
  4. $amount = 2;
  5.  
  6. $price2 = bcmul($price, $amount, 2);
  7. $price_without_vat = bcdiv(bcmul($price2, $vat, 2), 100, 2);
  8. $p = bcsub($price, $price_without_vat, 2);
  9.  
  10. echo $p;
  11. echo '<br>';
  12. echo number_format($p, 2, ',', '.');
mls
Cytat(LordRaven @ 13.01.2012, 22:16:36 ) *
o coś takiego ci chodziło ?


tak mniej więcej... tylko vat liczy się od ceny netto, a liczby zapisuje jako liczby a nie string:

  1. $stawka_vat = 23;
  2. $cena_netto = 1060;
  3. $ilosc = 2;
  4.  
  5. $cena_brutto = $cena_netto * (1 + ($stawka_vat / 100));
  6. $wartosc_netto = $cena_netto * $ilosc;
  7. $wartosc_brutto = $cena_brutto * $ilosc;
  8. $wartosc_vat = $wartosc_brutto - $wartosc_netto;


To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.