[ 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 | 15
NapísalOffline : 03.08.2008 23:17 | zaokruhlovanie

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: 1772
Témy: 35 | 35
Bydlisko: BA - WESTSIDE
NapísalOffline : 03.08.2008 23:46 | zaokruhlovanie

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: 1719
Témy: 0 | 0
NapísalOffline : 04.08.2008 12:18 | zaokruhlovanie

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: 1772
Témy: 35 | 35
Bydlisko: BA - WESTSIDE
NapísalOffline : 04.08.2008 12:32 | zaokruhlovanie

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: 1586
Témy: 96 | 96
NapísalOffline : 04.08.2008 13:31 | zaokruhlovanie

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ý: 30.12.14
Príspevky: 25
Témy: 0 | 0
NapísalOffline : 04.08.2008 19:38 | zaokruhlovanie

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: 1772
Témy: 35 | 35
Bydlisko: BA - WESTSIDE
NapísalOffline : 04.08.2008 20:07 | zaokruhlovanie

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ý: 30.12.14
Príspevky: 25
Témy: 0 | 0
NapísalOffline : 04.08.2008 21:47 | zaokruhlovanie

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: 1719
Témy: 0 | 0
NapísalOffline : 04.08.2008 23:58 | zaokruhlovanie

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: 1586
Témy: 96 | 96
NapísalOffline : 05.08.2008 7:19 | zaokruhlovanie

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 | 15
Napísal autor témyOffline : 08.08.2008 10:22 | zaokruhlovanie

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.
 [ Príspevkov: 11 ] 


zaokruhlovanie



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

266

04.06.2012 23:11

Ďuri

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

Implicitne zaokruhlovanie-SQLite

v Databázy

4

614

28.07.2010 13:34

coldak

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

nespravne zaokruhlovanie v C

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

4

350

08.04.2014 10:27

deddy1000

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

zaokruhlovanie cisiel na 2 desatinne miesta

v PHP, ASP

2

5338

08.07.2008 13:25

Broko71



© 2005 - 2017 PCforum, edited by JanoF