01.07.2022 16:07
1
Mám tuto funkci, která mi vrací barvu podle procent. Teďka jsem ale narazil na problém, že když je číslo příliš malé, tak místo 0,45% mi to vrací 450%
Kód:
function color_percent($number, $base){
Kód:
    $avg = $number / $base * 100;
Kód:
    echo "$number / $base * 100 = $avg";

Zobrazuje se mi toto:

Kód:
450,000 / 98,696,000 * 100 = 459.18367346939
Správně by to mělo být 0,45 
01.07.2022 16:32
2
Původně odeslal unlucky
Mám tuto funkci, která mi vrací barvu podle procent. Teďka jsem ale narazil na problém, že když je číslo příliš malé, tak místo 0,45% mi to vrací 450%
Kód:
function color_percent($number, $base){
Kód:
    $avg = $number / $base * 100;
Kód:
    echo "$number / $base * 100 = $avg";

Zobrazuje se mi toto:

Kód:
450,000 / 98,696,000 * 100 = 459.18367346939
Správně by to mělo být 0,45 
Oddělovač desetinných míst je tečka, ne čárka.
Pokud jde o čárku jako oddělovač řádů, tak ten se v číslech v PHP nepoužívá.

450,000 je konvertováno na 450
98,696,000 je konvertováno na 98

Pokud jde o celá čísla, pak je potřeba vynechat čárky.
Jinak se to konvertuje na int a pak to je 450 / 98 * 100
01.07.2022 16:39
3
čárky tam jsou, protože jsem použil number_format.
Takže mám použít number format až na konec?

edit: Díky, už to funguje
01.07.2022 16:42
4
Původně odeslal unlucky
čárky tam jsou, protože jsem použil number_format.
Takže mám použít number format až na konci?
number_format použij až když ta čísla vykresluješ humanoidům třeba do html, interně v PHP používej standardní formát 12.34 což je float číslo.
01.07.2022 22:45
5
Jen tu odlozim pro budouci ctenare trochu vic vysvetleni.

Pocitac proste pracuje s ruznymi typy dat jinak  (opravdu jsou binarne v pameti ulozena jinak) a podle typu s nimi pracuje ruznymi zpusoby, pokud pouzijes number_format, tak prevadis automaticky cislo na string - tedy textovy retezec (cisla najednou nejsou reprezentovany binarne jako cisla, ale jako text)... PHP sice i tak s tim umi pracovat jako s cislem, ale dela to tak, ze se pokousi opet prevest ten textovy retezec zpet na cislo a jelikoz je jako standard cisel v pocitacich oddelovac desetinnych mist tecka, nedokaze ho prevest spravne. 

Jedine spravne reseni je tak cisla vzdy nechavat jako cisla az uplne na konec retezce - tedy az do momentu kdy je opravdu vypisuji jako textovy retezec na web, jinak se bude dit nepredvidatelna magie. Jiny programovaci jazyk by ti ani nedovolil to udelat, ale php je prave hezke v tom ze se snazi ti to odpustit a presto to nejak zpracovat, bohuzel v tomhle pripade se mu to nepodari, ceske formatovani zkratka nezpracuje spravne... 
03.07.2022 04:38
6
Původně odeslal Aleš Jiříček
Jen tu odlozim pro budouci ctenare trochu vic vysvetleni.

Pocitac proste pracuje s ruznymi typy dat jinak  (opravdu jsou binarne v pameti ulozena jinak) a podle typu s nimi pracuje ruznymi zpusoby, pokud pouzijes number_format, tak prevadis automaticky cislo na string - tedy textovy retezec (cisla najednou nejsou reprezentovany binarne jako cisla, ale jako text)... PHP sice i tak s tim umi pracovat jako s cislem, ale dela to tak, ze se pokousi opet prevest ten textovy retezec zpet na cislo a jelikoz je jako standard cisel v pocitacich oddelovac desetinnych mist tecka, nedokaze ho prevest spravne. 

Jedine spravne reseni je tak cisla vzdy nechavat jako cisla az uplne na konec retezce - tedy az do momentu kdy je opravdu vypisuji jako textovy retezec na web, jinak se bude dit nepredvidatelna magie. Jiny programovaci jazyk by ti ani nedovolil to udelat, ale php je prave hezke v tom ze se snazi ti to odpustit a presto to nejak zpracovat, bohuzel v tomhle pripade se mu to nepodari, ceske formatovani zkratka nezpracuje spravne... 
Nedával jsem pozor a myslel jsem si že NUMBER_format převede řetězec na číselný formát a hezky to upraví
03.07.2022 11:15
7
ono prave cislo ulozene v pameti ze sve podstaty neobsahuje zadne formatovani, to se da udelat jen prevedenim na string, ale chyba je to pochopitelna... naming konvence v PHP je dost strasna
03.07.2022 18:47
8
Původně odeslal Aleš Jiříček
Jen tu odlozim pro budouci ctenare trochu vic vysvetleni.

Pocitac proste pracuje s ruznymi typy dat jinak  (opravdu jsou binarne v pameti ulozena jinak) a podle typu s nimi pracuje ruznymi zpusoby, pokud pouzijes number_format, tak prevadis automaticky cislo na string - tedy textovy retezec (cisla najednou nejsou reprezentovany binarne jako cisla, ale jako text)... PHP sice i tak s tim umi pracovat jako s cislem, ale dela to tak, ze se pokousi opet prevest ten textovy retezec zpet na cislo a jelikoz je jako standard cisel v pocitacich oddelovac desetinnych mist tecka, nedokaze ho prevest spravne. 

Jedine spravne reseni je tak cisla vzdy nechavat jako cisla az uplne na konec retezce - tedy az do momentu kdy je opravdu vypisuji jako textovy retezec na web, jinak se bude dit nepredvidatelna magie. Jiny programovaci jazyk by ti ani nedovolil to udelat, ale php je prave hezke v tom ze se snazi ti to odpustit a presto to nejak zpracovat, bohuzel v tomhle pripade se mu to nepodari, ceske formatovani zkratka nezpracuje spravne... 
Dekuji za vysvetleni!