php , neziadane zaokruhlovanie

Programovacie jazyky, rady, poradňa...
Nadeo
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2202
Registrovaný: 04 nov 2006, 19:38
Bydlisko: BA/LV
Kontaktovať používateľa:

php , neziadane zaokruhlovanie

Príspevok od používateľa Nadeo »

spravil som si script na pytagorovu vetu ( :D ) ... ale vysledok mi zaokruhluje na cele cisla .. je to funckia na odmocnovanie bcsqrt() ... otazka je ako spravit tak aby som dostaval aj desatinne cisla ?
http://nadeo.czweb.org/pytagor.php

Kód: Vybrať všetko

<form method="GET">
C2 = A2 + B2<br> 
a2<input type="text" name="a2"><br>
b2<input type="text" name="b2"><br>
<input type="submit" value="vypocitaj">

<?php

$a2nasob = ($a2 * $a2);
$b2nasob = ($b2 * $b2);
$spocitaj = ($a2nasob + $b2nasob);
$cislo = bcsqrt($spocitaj);

echo "C2 = $cislo";


?>
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

ta funkcia ma aj druhy parameter ktory udava pocet desatinnych miest na zaokruhlovanie a prednastavena hodnota je 0.

Kód: Vybrať všetko

string bcsqrt(8,5);
zaokruhlenie druhej odmocniny na 5 desatinnych miest
Nadeo
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2202
Registrovaný: 04 nov 2006, 19:38
Bydlisko: BA/LV
Kontaktovať používateľa:

Príspevok od používateľa Nadeo »

diki moc , K+ :)
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

ako by som zaokruhlil cislo v JS
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

a ked chcem na urcity pocet desatinnych miest?
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Príspevok od používateľa konyk87 »

http://www.javascriptkit.com/javatutors/round.shtml

Kód: Vybrať všetko

var original=28.453

//round "original" to two decimals
var result=Math.round(original*100)/100  //returns 28.45

// round "original" to 1 decimal
var result=Math.round(original*10)/10  //returns 28.5

//round 8.111111 to 3 decimals
var result=Math.round(8.111111*1000)/1000  //returns 8.111
atd :)
beluský
Darca
Darca
Používateľov profilový obrázok
Príspevky: 317
Registrovaný: 21 sep 2006, 13:46

Príspevok od používateľa beluský »

konyk87 napísal:http://www.javascriptkit.com/javatutors/round.shtml

Kód: Vybrať všetko

var original=28.453

//round "original" to two decimals
var result=Math.round(original*100)/100  //returns 28.45

// round "original" to 1 decimal
var result=Math.round(original*10)/10  //returns 28.5

//round 8.111111 to 3 decimals
var result=Math.round(8.111111*1000)/1000  //returns 8.111
atd :)
a co s cislom napr 1 na 2 des. miesta, to nejde... zostane 1 po zaokruhleni
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Príspevok od používateľa konyk87 »

hmm..a 1.00 nie je 1? :) to o com hovoris je vypis na 2 desatinne cisla a da sa to spravit napr takto..

Kód: Vybrať všetko

Math.round(1.20).toFixed(2)
- cislo zaokruhli na cele cislo a vypise v tvare 1.00

alebo

Kód: Vybrať všetko

(Math.round(1.102 * 100) / 100).toFixed(2)
- cislo zaokruhli na 2 desatinne miesta a vypise (v tomto pripade 1.10)
jannyo
Amateur
Amateur
Príspevky: 12
Registrovaný: 15 apr 2009, 23:20

Príspevok od používateľa jannyo »

Môžem sa opýtať?.. som tiež začiatočník

Existuje nejaká možnosť že by sa to dalo nastaviť aby výsledny koniec čísla zobrazilo buď 5 alebo 0 k čomu by bolo bližšie...

Napísal som script na pomôcku pre travian ak poznáte.. (: .. tam to prepočítava suroviny no to nie je podstatné ale proste niekedy sa výsledok sekne o 1. napr. to vypočíta 5351 a má to byť 5350 alebo 4244 a má to byť 4245. niektoré výsledky zobrazí tak ako má a niektore dopadnú takto..

Inak bolo tam aj kopu deatinných miest tie som poriešil s príkazom round () ale už výsledne číslo nie niekde v príklade.

Vopred ďakujem za odpoveď ... Jannyo...
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Vydelíš to číslom 5 (môžeš tam pripočítať aj nejaké malé číslo, aby sa to správne zaokrúhlilo; napr. +0.5 prípadne +2, neviem, čo presne robíš, takže netuším, ako veľmi nepresné ti to môže vychádzať) orežeš desatinné miesta (možno bude stačiť pretypovanie na integer), vynásobíš to číslom 5 a máš výsledok. :)
jannyo
Amateur
Amateur
Príspevky: 12
Registrovaný: 15 apr 2009, 23:20

Príspevok od používateľa jannyo »

No dobre tak sem pastnem ten script dúfam že to neni niečo ako spam alebo tak ak je tak sa ospravedlňujem a potom si to vymažte..

Kód: Vybrať všetko

<?php

$zaklad=14485; // toto je vstupná hodnota 

$najmensia_hodnota=19600; // toto je najmenšia hodnota z doleuvedených to je preddefinované
$hlina=63155/$najmensia_hodnota;
$drevo=50090/$najmensia_hodnota;
$zelezo=38110/$najmensia_hodnota;
$obilie=19600/$najmensia_hodnota; // keď tieto hodnoty  vydelím dostanem číslo s kopou desatunných miest 

$sucet_pomerov=$hlina+$drevo+$zelezo+$obilie; // tu sa sčítaju výsledky predchádzajuceho výpočtu

$a=$zaklad/$sucet_pomerov; // toto je pre mňa to číslo o ktoré mi išlo 8.722 a nejaké drobné

$hlin_a=$a*$hlina;
$drev_o=$a*$drevo;
$zelez_o=$a*$zelezo;
$obili_e=$a*$obilie; // prebieha tu výpočet na konečné hodnoty

echo round($hlin_a)." : ";echo round($drev_o)." : ";echo round($zelez_o)." : ";echo round($obili_e)."<br><br>";

?>
ako som už napísal ide o pomôcku na travian
výsledok tohoto je 5351 : 4244 : 3229 : 1661
a malo by byť 5350 : 4245 : 3230 : 1660
ale ak za základ dosadíme napr. číslo 170955 to je vlastne súčet týchto základných čísiel. dostanem správny výsledok 63155 : 50090 : 38110 : 19600
ale ak tam dosadíme nepr. 1570 výsledok je tiež správny
ak sa pozriete sem uvidíte tam tieto čísla čo som sem písal http://help.travian.cz/index.php?type=faq&mod=372
proste je to taký univerzálny vzorec pre túto budovu keďže pomery sú približne rovnaké týmto sa chcem vyhnúť zbytočnému písaniu databázy.. (:
no tak trošku som sa rozpísal ale dúfam že už je jasné o čo mi ide..
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ak potrebuješ vypočítať cenu budovy, môžeš použiť túto funkciu:

Kód: Vybrať všetko

<?php
function potrebne_suroviny($zaklad, $uroven=1)
{
	if ($uroven < 1) return 0;
	
	$t = $zaklad * pow(1.28, $uroven - 1);
	$t = round($t / 5.0) * 5;
	return $t;
}

echo potrebne_suroviny(180, 17);
?>
(testoval som ju len pre tú jednu budovu, takže neviem, či to funguje vždy)

Podľa mňa by bolo rozumnejšie dať si tie údaje do polí v php súbore (keďže nikde nie je zaručené, že sa to nejako nezmení) a do DB ukladať len typ budovy a úroveň (ak teda chceš niečo do DB ukladať).
jannyo
Amateur
Amateur
Príspevky: 12
Registrovaný: 15 apr 2009, 23:20

Príspevok od používateľa jannyo »

no a teraz som v koncoch ten tvoj spôsob mi nejako nefunguje.. (: .. asi niečo robím zle ale neviem čo..

no na každú budovu sú iné pomery to porobím neskôr podstatná je ta prvá.. (:

a do toho čo som urobil ja sa to asi nejako nedá čo?.. zaokrúhliť na blžšie číslo k 5 alebo 0...
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Čo presne ti na tom mojom príklade nefunguje? (lebo "ten tvoj spôsob mi nejako nefunguje.." neobsahuje žiadnu použiteľnú informáciu)
Pozeral som viac budov a pri každej, čo som pozeral, stojí ďalšia úroveň 1,28 násobok predchádzajúcej úrovne (takže ten môj príklad funguje aj pri iných budovách; vstupné parametre sú: potrebné suroviny pri prvej úrovni; úroveň, pre ktorú chceš zistiť potrebné suroviny).

Inak zaokrúhľovanie tam je v riadku:

Kód: Vybrať všetko

$t = round($t / 5.0) * 5;
jannyo
Amateur
Amateur
Príspevky: 12
Registrovaný: 15 apr 2009, 23:20

Príspevok od používateľa jannyo »

Ahaa jo promiň.. (: .. ja som písal že som začiatočník a tak som potreboval aj nejaké vysvetlenie idem to poskúšať..

a ešte otázočka čo znamená to pow a tie čísla (180, 17); ?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

180 - počet surovín potrebných pre prvú úroveň (napr. pri ambasáde potrebuješ na prvú úroveň 18 dreva).
17 - úroveň, pre ktorú chceš zistiť, koľko budeš potrebovať dreva (a teda pri tej ambasáde by ti malo vypísať 9345).
pow - vypočíta mocninu (pow(x, y) vypočíta x na y)

PS: Ty budeš pravdepodobne potrebovať takmer vždy počítať všetky 4 suroviny, takže by sa tá funkcia mohla upraviť tak, aby sa to vypočítalo naraz.
jannyo
Amateur
Amateur
Príspevky: 12
Registrovaný: 15 apr 2009, 23:20

Príspevok od používateľa jannyo »

jo díky moc za pomoc .. (: .. ešte jeden detail ak si nejaký user bude chcieť zistiť koľko stojí ten level konkrétnej budovy musí najprv definovať ten konkrétny level ktorý chce vyrobiť . pochopil som to správne?..

Lebo ja potrebujem niečo kde to netreba definovať proste aby ten user tam napísal len celkový súčet surovín a to je všetko.. ale ešte to nejako vyskúšam s tou funkciou doriešiť fakt díky moc veľmi si mi pomôhol.. (:
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Čo presne robíš (lebo z toho, čo si doteraz napísal, mi to nie je jasné)?
jannyo
Amateur
Amateur
Príspevky: 12
Registrovaný: 15 apr 2009, 23:20

Príspevok od používateľa jannyo »

Noo robím niečo ako kalkulačku... proste v tej hre ak máš nadbytok jedného typu surovín a málo inej suroviny tak sa to dá rozdeliť podla toho ako potrebuješ..

existuje už niečo podobné ale tam si musíš vybrať dedinu, aký level chceš staviať potom tam musíš napísať všetky druhy surovín do štyroch koloniek. (: ..

no a ja robím niečo také že si vyberieš budovu zadáš tam celkový počet surovín ( v tej hre to napíše koľko je to spolu tak to netreba sčítavať) a ono ti to hneď vypíše ako musíš tie suroviny rozdeliť a už som tam pridal aj to aký level maximálne postavíš.

len teraz som zase na ďalší problém natrafil. (: na nete som to pozeral ale som sa nedopátral k riešeniu..

no chcem skombinovať rolovacie menu s tou kolonkou.. neviem ako to mám nazvať.. proste si vyberieš v tom rolovaciom menu napr. rezidenciu a do tej kolonky napíšeš koľko máš surovín a hneď ti to prepočíta..

ale šak hádam na niečo prídem. (: ešte len skúmam osobytné funkcie tých dvoch častí.. (: .. akurát si spomínam že niečo podobné som videl len s javascriptom a ten ja vôbec neovládam tak neviem no.. (: skúšal som to vložiť do toho skriptu a všelijako prekonfigurovať ale nepodarilo sa mi to spojazdniť.


EDIT: našel som tú stránku http://www.travitools.rypi.cz/npc3

jo a ešte niečo prosím ťa nedávaj mi tu skripty lem mi napíš ako by sa to môhlo dať (ako spôsob) ja si to chcem urobiť sám nájdem to na nete.. (:

heh a ešte niečo ..(: .. môžem hocikde do javascriptu vložiť namiesto nejakej hodnoty premennú z php scriptu?
Napísať odpoveď