Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 11 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 18.06.07
Prihlásený: 11.12.11
Príspevky: 74
Témy: 15
Príspevok NapísalOffline : 03.08.2008 23:17

Zdravim,

dostal som potrebu zaokruhlovat :roll: 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.
Offline

Skúsený užívateľ
Skúsený užívateľ
zaokruhlovanie

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35
Bydlisko: BA - WESTSIDE
Príspevok NapísalOffline : 03.08.2008 23:46

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.
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0
Príspevok NapísalOffline : 04.08.2008 12:18

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);
?>


Offline

Skúsený užívateľ
Skúsený užívateľ
zaokruhlovanie

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35
Bydlisko: BA - WESTSIDE
Príspevok NapísalOffline : 04.08.2008 12:32

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.
Offline

Skúsený užívateľ
Skúsený užívateľ
zaokruhlovanie

Registrovaný: 09.07.08
Prihlásený: 17.01.15
Príspevky: 1585
Témy: 96
Príspevok NapísalOffline : 04.08.2008 13:31

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!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.09.06
Prihlásený: 01.04.23
Príspevky: 25
Témy: 0
Príspevok NapísalOffline : 04.08.2008 19:38

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...).


Offline

Skúsený užívateľ
Skúsený užívateľ
zaokruhlovanie

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35
Bydlisko: BA - WESTSIDE
Príspevok NapísalOffline : 04.08.2008 20:07

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.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.09.06
Prihlásený: 01.04.23
Príspevky: 25
Témy: 0
Príspevok NapísalOffline : 04.08.2008 21:47

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;
}


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0
Príspevok NapísalOffline : 04.08.2008 23:58

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).


Offline

Skúsený užívateľ
Skúsený užívateľ
zaokruhlovanie

Registrovaný: 09.07.08
Prihlásený: 17.01.15
Príspevky: 1585
Témy: 96
Príspevok NapísalOffline : 05.08.2008 7:19

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!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 18.06.07
Prihlásený: 11.12.11
Príspevky: 74
Témy: 15
Príspevok Napísal autor témyOffline : 08.08.2008 10:22

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.
Odpovedať na tému [ Príspevkov: 11 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. zaokruhlovanie

v JavaScript, VBScript, Ajax

1

499

04.06.2012 23:11

Ďuri Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Implicitne zaokruhlovanie-SQLite

v Databázy

4

847

28.07.2010 13:34

coldak Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. nespravne zaokruhlovanie v C

v Assembler, C, C++, Pascal, Java

4

866

08.04.2014 10:27

deddy1000 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zaokruhlovanie cisiel na 2 desatinne miesta

v PHP, ASP

2

7719

08.07.2008 13:25

Broko71 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra