Stránka: 1 z 1
| [ Príspevkov: 11 ] | |
Autor | Správa |
---|
Registrovaný: 18.06.07 Prihlásený: 11.12.11 Príspevky: 74 Témy: 15 | 15 |
Zdravim,
dostal som potrebu zaokruhlovat Zaokruhlujem obycajnou funkciou "round". Problem je v tom, ze potrebujem aby cislo napr.: 1,20379 bolo na vystupe 1,20 a nie 1,2. Teda potrebujem dorobit na konci cisla 1,2 nulu.
(Cislo som uviedol len ako priklad, potrebujem preratavat a zaokruhlovat vela roznych cisiel)
Co by ste mi poradili?
Dakujem
Miro
_________________ M.G. |
|
Registrovaný: 30.05.06 Prihlásený: 08.10.14 Príspevky: 1756 Témy: 35 | 35 Bydlisko: BA - WESTSIDE |
Kód: sprintf("%01.2f", $cislo); Pre podrobnejšie info si pozri funkciu sprintf a jej formátovacie parametre. Edit: no, zistil som, že sa to celkom nehodí na slovenský formát desatiných čísiel, takže ak používaš na oddeľovanie desatinej časti čiarku, je lepšie toto: Kód: number_format(str_replace(",", ".", $cislo), 2, ",", "");
Posledný parameter funkcie number_format je oddeľovač tisícok, tak to môže byť kvôli estetike napr. medzera. A pre eleganciu je asi najlepšie spraviť si svoju funkciu: Kód: function my_number_format($number) { return number_format(str_replace(",", ".", $number), 2, ",", ""); } echo my_number_format(1,201); // 1,20 echo my_number_format(1.201); // 1,20 - teda bodku premeni na ciarku echo my_number_format(1); // 1,00 echo my_number_format(1,109) // 1.11
_________________
A. S. Tanenbaum píše: The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice. |
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | 0 |
Tá funkcia (a aj niektoré ďalšie, napr. tie, žo pracujú s dátumom), sa riadi nastavením "locale".
Kód: <?php echo "<br>", sprintf("%.2f", 123456.789); setlocale(LC_ALL, 'sk_SK'); echo "<br>", sprintf("%.2f", 123456.789); ?>
|
|
Registrovaný: 30.05.06 Prihlásený: 08.10.14 Príspevky: 1756 Témy: 35 | 35 Bydlisko: BA - WESTSIDE |
Hmm, mne to dáva rovnaký výstup. A problém je skôr so vstupom, pretože ak tomu číslu dáš float s desatinou čiarkou, tak ti tú časť za ňou odignoruje.
_________________
A. S. Tanenbaum píše: The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice. |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Kód: function pridaj_nulu($floatvalue){ $erej = explode(".",$floatvalue);
if($erej[1]<10 and $erej[1]>0){return $floatvalue."0";} else{return $floatvalue;} } }
Veľmi provizórny kód, treba ho upraviť
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 22.09.06 Prihlásený: 01.04.23 Príspevky: 25 Témy: 0 | 0 |
Kód: function pridajnuly($cislo, $pocetmiest) { $celecislo = strtok($cislo, ","); $desatinnecislo = strtok(","); $desatinnecislo = str_pad($desatinnecislo, $pocetmiest, "0", STR_PAD_RIGHT); return $celecislo.",".$desatinnecislo; } Príklady Kód: echo pridajnuly("120,34", 5); // 120,34000 echo pridajnuly("1,029", 5); // 1,02900 echo pridajnuly("1,2", 2); // 1,20 echo pridajnuly("10,10", 1); // 10,10 Funkciu použi až po dokončení matematických operácií, pretože ako vidíš vráti string a nie číslo. V prípade, že chceš z daného reťazca číslo, stači použiť (pozor na desatinnú čiarku/bodku): Kód: floatval($cislo);
potom však budú koncové nuly odstránené (pri výpočtoch to vadiť nebude...).
|
|
Registrovaný: 30.05.06 Prihlásený: 08.10.14 Príspevky: 1756 Témy: 35 | 35 Bydlisko: BA - WESTSIDE |
Roobertek, tvoja funkcia nevie pracovať s desatinou čiarkou.
Frey, tvoja funkcia nevie pracovať s desatinou bodkou.
Pri používaní by mali byť zohľadnené oba formáty desatiných čísel. S bodkou, pretože tak to je správne v PHP. S čiarkou, pretože tak je to správne po slovensky.
_________________
A. S. Tanenbaum píše: The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice. |
|
Registrovaný: 22.09.06 Prihlásený: 01.04.23 Príspevky: 25 Témy: 0 | 0 |
p360t píše: Roobertek, tvoja funkcia nevie pracovať s desatinou čiarkou. Frey, tvoja funkcia nevie pracovať s desatinou bodkou.
Pri používaní by mali byť zohľadnené oba formáty desatiných čísel. S bodkou, pretože tak to je správne v PHP. S čiarkou, pretože tak je to správne po slovensky.
Áno, to je pravda. Dorobil som teda jednoduché overenie či sa používa bodka alebo čiarka. Celá funkcia vypadá takto:
Kód: function pridajnuly($cislo, $pocetmiest) { (substr_count($cislo, ".") == 1) ? $oddelovac = "." : $oddelovac = ","; $celecislo = strtok($cislo, $oddelovac); $desatinnecislo = strtok($oddelovac); $desatinnecislo = str_pad($desatinnecislo, $pocetmiest, "0", STR_PAD_RIGHT); return $celecislo.$oddelovac.$desatinnecislo; }
|
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | 0 |
p360t píše: Hmm, mne to dáva rovnaký výstup. A problém je skôr so vstupom, pretože ak tomu číslu dáš float s desatinou čiarkou, tak ti tú časť za ňou odignoruje. Pravdepodobne si to skúšal vo Windows (prípadne niekde, kde nie je nainštalované slovenské locale). Tam je reťazec pre slovenské locale iný (a nie sk_SK).
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Som napísal, že je to veľmi provizórna funkcia. Kebyže sa s ňou pohráš, tak sa dá odvíjať týmto smerom, nie?
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 18.06.07 Prihlásený: 11.12.11 Príspevky: 74 Témy: 15 | 15 |
Pani vdaka vam, pomohli ste mi. Pripad vstupu s des. ciarkou nepotrebujem osetrovat, vstup bude vzdy len z PHP. Stacilo mi pouzit kod p360t
Kód: number_format(str_replace(",", ".", $cislo), 2, ",", "");
_________________ M.G. |
|
Stránka: 1 z 1
| [ Príspevkov: 11 ] | |
|