Jump to content
php.lv forumi

Skaitļu apaļošana


ThA-B

Recommended Posts

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

  • Replies 30
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

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 by john.brown
Link to comment
Share on other sites

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 by ThA-B
Link to comment
Share on other sites

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

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

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 by Delfins
Link to comment
Share on other sites

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

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 by john.brown
Link to comment
Share on other sites


×
×
  • Create New...