ThA-B Posted June 15, 2006 Report Share Posted June 15, 2006 Sveiciens! It kā pameklējos, bet atbilsošu topicu par tēmu "apaļoš*" neatradu, tomēr ceru, ka neesmu vienīgais, kam šitais sāp. $x=0.49; print round($x); >> 0 Rezultāts ir skarbs - 0 (PHP Version 4.3.10). Ja pareizi atceros matemātiku no pamatskolas, tad 9 apaļo četrnieku uz augšu līdz pieci un tas, savukārt uz augšu līdz vienam. rezultātā būtu jābūt 1. Cik googleeju, uzzināju ka eksistē lērums ar apaļošanas metodikām, tomēr es nesaprotu kā PHP iestāstīt ko es gribu. Varbūt kādam ir komentārs? Starp citu, Excel round dara šito pašu pigoru. Link to comment Share on other sites More sharing options...
Vebers Posted June 15, 2006 Report Share Posted June 15, 2006 float round ( float val [, int precision] ) http://lv.php.net/round ;) Link to comment Share on other sites More sharing options...
ThA-B Posted June 15, 2006 Author Report Share Posted June 15, 2006 (edited) float round ( float val [, int precision] ) http://lv.php.net/round ;) čavo? Nesapratu! Precizion tak neko nedod. $x=0.4949; print round($x,2); arī atgriež 0.49, nevis 0.50, kā būtu pēc skolas grāmatām Edited June 15, 2006 by ThA-B Link to comment Share on other sites More sharing options...
john.brown Posted June 15, 2006 Report Share Posted June 15, 2006 (edited) Kā tad nu nedod :) Tak tavā gadījumā tu viņam JAU padod skaitli vajadzīgajā precīzijā (2 cip. aiz komata). Lai dabūtu 0.5 vajag precīziju 1. precision (number of digits after the decimal point). © php manual Edited June 15, 2006 by john.brown Link to comment Share on other sites More sharing options...
ThA-B Posted June 15, 2006 Author Report Share Posted June 15, 2006 (edited) Kā tad nu nedod :) Tak tavā gadījumā tu viņam JAU padod skaitli vajadzīgajā precīzijā (2 cip. aiz komata). Lai dabūtu 0.5 vajag precīziju 1. man nevajag 0.5 :) Man vajag pareizu apaļošanu pofig cik zīmēs aiz komata. ar precīziju līdz divām zīmēm aiz komata 0.4849 viš apaļo uz 0.48, kaut arii jaabuut 0.49 Vai nu man vai nu Jums, bet kaadam toch nedalec buutiiba :) Edited June 15, 2006 by ThA-B Link to comment Share on other sites More sharing options...
KAC Posted June 15, 2006 Report Share Posted June 15, 2006 manupraat no 0.4849 jaabuut 0.48 0.49 tev buus saakot no 0.4850 Link to comment Share on other sites More sharing options...
bubu Posted June 15, 2006 Report Share Posted June 15, 2006 Ja pareizi atceros matemātiku no pamatskolas, tad 9 apaļo četrnieku uz augšu līdz pieci un tas, savukārt uz augšu līdz vienam. rezultātā būtu jābūt 1. Slikti skolā klausījies. Pareizs noapaļošana 0.49 līdz veselam skaitlim ir 1. Padomā tak loģiski - intervālu [0..1), ja sadala uz pusēm, tad pirmā puse ir [0..0.5) un otrā puse ir [0.5..1). Vai nav acīmredzami, kurā intervālā pieder 0.49? Link to comment Share on other sites More sharing options...
Delfins Posted June 15, 2006 Report Share Posted June 15, 2006 mueh.. matemātiķi... Anyway, precizitāte jāpadod.. citādi būs negaidīti rezultāti... Link to comment Share on other sites More sharing options...
jauninjais Posted June 15, 2006 Report Share Posted June 15, 2006 (edited) Starp citu, Excel round dara šito pašu pigoru. tu domaaa, ka esi gudraaks par exceli un php xD ja tev vajag uz augshu apaljot, tad vari izmantot ceil: echo ceil(4.3); // 5 Edited June 15, 2006 by jauninjais Link to comment Share on other sites More sharing options...
bubu Posted June 15, 2006 Report Share Posted June 15, 2006 mueh.. matemātiķi... Anyway, precizitāte jāpadod.. citādi būs negaidīti rezultāti... Kas par muļķībām. Precizitātes nepadošana nu nekādīgi neradīs negaidītus rezultātus. Link to comment Share on other sites More sharing options...
Vebers Posted June 15, 2006 Report Share Posted June 15, 2006 Citāts no manuāļa: Returns the rounded value of val to specified precision (number of digits after the decimal point). precision can also be negative or zero (default). Link to comment Share on other sites More sharing options...
Delfins Posted June 16, 2006 Report Share Posted June 16, 2006 (edited) bubu (un arī makaTawa), tas bija domāts, ka uz default vērtībām nedrīkst paļauties... it īpaši programmēšanā, kur lietas grozās ap "naudas"/etc_svarīgiem aprēķiniem... PS: MakaTaNaw, pēc tava citāta rezultāts ir loģisks... default=0, tāpēc 0.49=>0... kā apaļot ciparus, tev jau izstāstīja :) Edited June 16, 2006 by Delfins Link to comment Share on other sites More sharing options...
[Ya] Posted June 16, 2006 Report Share Posted June 16, 2006 pēc manām domām, round skatās pēc pirmā cipara, ja nu tiešām vajag noapaljot 0.49 uz augšu tad jau var ielikt ciklā kur cikla garums ir decimālskaitļu daudzums-1! $nauda="0,49"; list($ls,$sant)=explode(".",$nauda); for($x=strlen($sant)-1;$x>=0;$x--) { $nauda=round($nauda,$x); } un šinī gadījumā viņam vajadzētu noapaļot 0.49 uz augšu! bet peec matemātikas man liekas ka 0.49 tiek apaļots uz leju, tālab kad 49 tiek uzskatīts kā viens cipars, nevis katrs atsevišķi, kur stepbystep noapaļo Link to comment Share on other sites More sharing options...
Delfins Posted June 16, 2006 Report Share Posted June 16, 2006 stepbystep neviens neapaļo... 0.4(4)9 != 1 Link to comment Share on other sites More sharing options...
john.brown Posted June 16, 2006 Report Share Posted June 16, 2006 (edited) Round apaļo, kā skolā mācīts. Ja tev ir jānoapaļo līdz divām zīmēm aiz komata, un sākuma skaitlis IR ar divām zīmēm aiz komata - tad loģiski tur apaļot nav ko. Viņš jau ir tajā precīzijā, kura prasīta! Ja skaitlis ir ar trīs vai vairāk zīmēm, tad liekās zīmes tiek apaļotas, kā pienākas - kas mazāks par 5 uz leju, kas vienāds vai lielāks - uz augšu. Tik jāsaprot, ka apaļotas tiek LIEKĀS zīmes aiz komata. Tāpēc vēlreiz - round(0.49,2) NEMAINA SKAITLĪ NEKO! Jo nav lieko zīmju aiz komata! Edited June 16, 2006 by john.brown Link to comment Share on other sites More sharing options...
Recommended Posts