Visualizzazione post con etichetta xajax. Mostra tutti i post
Visualizzazione post con etichetta xajax. Mostra tutti i post

domenica, maggio 06, 2007

[JavaScript] Approssimazione intelligente e formattazione nel formato italiano dei numeri

Questa è una funzione JavaScript che ho scritto per approssimare in modo intelligente e formattare nel formato italiano dei prezzi inseriti in una applicazione web che ho creato.

Con "approssimazione intelligente" intendo in realtà una non approssimazione. In pratica questa funzione non tronca i decimali, ma solo quando necessario aggiunge gli zeri.
Cercherò di chiarire meglio le cose con un esempio che riguarda dei prezzi:
- se il prezzo inserito è 100 questo viene trasformato in 100,00
- mentre se il prezzo inserito è 0,045678 questo non viene approssimato a 0,04 ma rimane 0,045678 (1.000.000 x 0,04 = 40.000,00 mentre 1.000.000 x 0,045678 = 45.678,00 => una bella differenza soprattutto visto che sono euro).

Con "formattare nel formato italiano" intendo formattare un numero usando la >,< (virgola) come separatore dei decimali ed il >.< (punto) come separatore delle migliaia.

Ecco la funzione all'interno di una pagina html d'esempio:
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
<title>Approssimo intelligentemente</title>
<script type="text/javascript">
<!--

// Approssima intelligentemente e formatta nel formato it un numero
function approssima(numero, tipo, dec) {
if(tipo == "it") {
// gli tolgo i punti delle migliaia e gli eventuali zeri iniziali
// e lo divido in parte intera e parte non intera
valore = numero.replace(/\.|^0*/g, '').split(',');
}
else {
// gli tolgo le virgole delle migliaia e gli eventuali zeri iniziali
// e lo divido in parte intera e parte non intera
valore = numero.replace(/\,|^0*/g, '').split('.');
}

// nella parte intera metto il punto tra le migliaia
if(valore[0] == '') valore_int = 0;
else {
valore_int = valore[0];
l = valore_int.length;
if(l > 3) {
i = l % 3;
if(i == 0) i = 3;
a = valore_int.substr(0, i);
while(i < l) {
a += '.' + valore_int.substr(i, 3);
i += 3;
}
valore_int = a;
}
}

// formatto e approssimo la parte decimale
if(valore[1] == undefined || valore[1] == '') {
if(dec == 0) valore_dec = '';
else for(i = 0, valore_dec = ","; i < dec; i++) valore_dec += "0";
}
else {
h = valore[1].length;
if(h == dec) valore_dec = "," + valore[1];
else {
if(dec > h) for(i = 0, valore_dec = "," + valore[1]; i < (dec - h); i++) valore_dec += "0";
else {
valore_dec = "".concat(valore[1].substr(0, dec), valore[1].substr(dec).replace(/[0]*$/, ''));
if(valore_dec != '') valore_dec = "," + valore_dec;
}
}
}

document.getElementById('risultato').innerHTML = valore_int + valore_dec;
}

-->
</script>
</head>
<body>

<h3>Approssimo intelligentemente</h3>

<table border="1" cellspacing="1" cellpadding="1">
<tr>
<td>Numero da approssimare: </td>
<td><input id="numero" type="text" size="20" /></td>
</tr>
<tr>
<td>Tipo numero: </td>
<td>
<select id="tipo">
<option value="it">Italiano</option>
<option value="en">Inglese</option>
</select>
</td>
</tr>
<tr>
<td>Numero minimo di decimali: </td>
<td><input id="decimali" type="text" size="4" /></td>
</tr>
<tr>
<th colspan="2"><input type="submit" value="Approssima e Formatta" onclick="approssima(document.getElementById('numero').value, document.getElementById('tipo').value, document.getElementById('decimali').value);" /></th>
</tr>
</table>

<h1 id="risultato">----</h1>

</body>
</html>


Ho usato delle strutture if-else per cercare di velocizzare la funzione visto che, in una versione semplificata (visto che mysql mi restituisce numeri "puliti"), la uso per formattare i dati di una tabella popolata (tramite il framework xajax) da un database mysql.
Purtroppo, nonostante tutto, questa funzione si è rilevata troppo lenta in Firefox, e mi dispiace ammetterlo, molto più veloce in IE.

Sicuramente, visto che non sono un "guru" del JavaScript, questa funzione può essere di sicuro migliorata.
Se avete qualche consiglio per aumentarne la velocità, non esiti a dirmelo !!!


Leggi il resto ...

lunedì, aprile 30, 2007

Cosa spero di pubblicare prossimamente

Sto lavorando per mettere un bootsplash in Debian Etch in modo da renderla più sexy :)

Visto che non ne posso più ne di compiz ne di beryl - ho una ati :( - ho intenzione di installare metisse sempre in Debian Etch. A mio avviso è molto più utile ed usabile di compiz e beryl.

Continuo inoltre a partecipare allo sviluppo di Kerneler e presto avrete notizie anche su di lui e sulle sue nuove caratteristiche.

Ho scritto inoltre delle interessanti funzioni javascript per l'approssimazione e l'italianizzazione (intesa a livello di formattazione) di numeri inseriti in dei form html.

Ho creato anche una specie di "format" in php, javascript e soprattutto xajax per manipolare (inserire, modificare, cancellare e riordinare) dati all'interno di tabelle i cui dati sono archiviati all'interno di un database mysql. Spero di postare presto qualche esempio di utilizzo.

Naturalmente vi terrò informati anche sull'andamento dello sviluppo di kde4.


Poi vorrei chiedere ai miei lettori sempre relativamente a Linux e Debian:
Di cosa volete che io vi parli?
A cosa siete particolarmente interessati?


Scrivetelo nei commenti.
Cercherò di fare tutto il possibile per accontentarvi, anche se queste belle giornate di sole ed i vari "ponti" e "controponti" (25 aprile e 1 maggio) mi stanno portando via molto tempo :)

Leggi il resto ...

lunedì, febbraio 19, 2007

La pausa di riflessione è finita ....

La pausa di "riflessione" che mi sono preso per decidere se mandare avanti questo blog oppure no è finita.
Ho deciso di continuare a bloggare.
Contenti !!! :-)

Ho convertito il blog alla nuova versione di blogger.com (ex beta), gli ho cambiato la grafica (ora stupenda), e ho modificato i banner di adsense (Messaggio subliminale: "Speriamo che qualcuno prima o poi ci clicchi , naturalmente solo se ci trova qualcosa di interessante ...").

In questi mesi in cui sono stato in silenzio oltre ad ammazzarmi di lavoro, ho avuto il tempo di notare alcuni progetti interessanti.
Kerneler - Piccolo script che permette di semplificare notevolmente la compilazione del Kernel su distribuzioni debian-based.
Xajax - Una libreria in php per creare facilmente applicazioni in Ajax.
Leggi il resto ...