Autor Zpráva
lubosh
Profil *
Ahoj,

mám dlouhé číslo (cenu) a potřebuji ji rozdělit od zadu po 3 místech, aby to bylo přehledněšjí.
např. z čísla: 3456789 chci vypsat: 3 456 789

V PHP jsem to udělal:
$cena = strrev((chunk_split(strrev($cislo),"3"," ")));
Číslo se obrátí, oddělí po třech místech a znovu obrátí nazpět.

Potřeboval bych to ale pomocí javascriptu.

Děkuji
Petroff
Profil
JS není tak bohatý na spec.funkce, takže pro výpis integer mi vyšly 3 zhruba na stejno (na nic jednoduššího jsem nepřišel).
Jedna z nich umí i záporná čísla.
Máš to komplet s testovací stránkou;
hlavně pozor na:
- nutnost převést číslo na řetězec (pro předání funkci: formatx)
- přejmenování fce /rekurze/

<html>
<head><title>test</title></head>
<meta http-equiv="Content-Type" content="text/html; charset=RTF-8">
<style>
body {margin:4em; font-size:100%}
label {width:21ex; float:left}
input {width:25ex; text-align:right; margin: 0 8pt 14pt}
#button {width:48ex; text-align:center; margin: 8pt 0}
p { font-size:80%; color: gray}}
</style>

<script>
var func="format1";
function zvolit(e){ func=e.name; e.select(); e.form.start.value = "ENTER ~ " + func;
}
function zpracuj(e) { e.form.vystup.value = eval(e.name+"(String("+Number(e.value)+"))")
}

/*===== 3 verze ====================================================================== =====*/

function format1(s) { var m=/(.*)(\d\d\d)$/.exec(s); return m?format1(m[1])+" "+m[2]:s;
}

function format2(s){
for(var res="",i=1; i<s.length+1; i++)
res=(i!=s.length&&i%3==0?" ":"") + s.slice(-i).slice(0,1) + res;
return res;
}

function format3(s){
var ss;
return (s!=(ss=s.slice(-3)))?format3(s.slice(0,s.length-3))+" "+ss:s
}

/*==================================================================== =====================*/

</script>
<body onload="document.forms[0][func].focus()">
<form onsubmit="this.vystup.focus();return false">

<label> Zadej číslo: [format1] </label>
<input type=text size=20 name="format1" onfocus="zvolit(this)" onchange="zpracuj(this)"></input><br>
<label> Zadej číslo: [format2] </label>
<input type=text size=20 name="format2" onfocus="zvolit(this)" onchange="zpracuj(this)"></input><br>
<label> Zadej číslo: [format3] </label>
<input type=text size=20 name="format3" onfocus="zvolit(this)" onchange="zpracuj(this)"></input><br>
<br>
<label> Výsledek formátování: </label>
<input type=text size=25 name="vystup" onfocus="this.form[func].focus()"></input><br>

<input type=submit name="start" id="button" align="center"></input>
</form>
<p> Ovládání: [TAB] [Shift-TAB] [Enter] </p>
</body>
</html>
lubosh
Profil *
wow, děkuju mockrát
peta
Profil
http://www.volny.cz/peter.mlich/www.htm#mssub19
http://www.volny.cz/peter.mlich/www.htm#msub8
mam pocit, ze na reference-info je na to i nejaka funkce.
Jinak by to slo take treba
t=""; cyklus (i=0;i<delka-3) t+=" "+x.substring(i-3,i) a tak nejak, aby se to poscitalo zezadu...
Toto téma je uzamčeno. Odpověď nelze zaslat.