Newsgroup: it.comp.lang.javascript
Titolo: stringa

ciao
volevo fare in modo da stampare solo 2 cifre dopo la virgola
esempio
da Euro 145145.125 ----> 145145.12
che funzione devo utilizzare?
grazie

> volevo fare in modo da stampare solo 2 cifre dopo la virgola
a suo tempo avevo scritto queste funzioni di utilizzo comune, vedi se ti
possono servire ...
function formatNumber(oText,numDec,lArrot) {
	if (lArrot == true) {
		arrotonda(oText,numDec);
	}
	var number = oText.value;
	// trasforma in stringa
	var txtNumber = oText.value.toString();
	// esce se la stringa = ""
	if (txtNumber == "") {
		return "";
	}
	// elimina eventuali spazi
	txtNumber = txtNumber.replace(/\ /g,"");
	var txtDecimal = "";
	// estrae parte intera e decimale
	// genera array con 2 elementi generati dalla separazione del carattere
punto
	var arrNumber = txtNumber.split('.');
	// verifica presenza errata di più punti
	if (arrNumber.length > 2) {
		alert("Numero errato.");
		return 0;
	}
	var txtInteger = "0";
	if (arrNumber[0] != "") {
		var txtInteger = arrNumber[0];
	}
	// Se vi sono decimali creo array decimali
	if (numDec > 0 ) {
		if (arrNumber.length == 1) {
			for (i = 0; i < numDec; i++) {
				txtDecimal = txtDecimal + "0";
			}
		} else {
			var txtDecimal = arrNumber[1].toString();
			txtDecimal = txtDecimal.substr(0,numDec);
		}
	}
	var str = txtInteger;
	if (numDec > 1) {
		str = str + "." + txtDecimal;
	}
	str = padSpaces(str,oText.size);
	oText.value = str;
//	return str;
}
function arrotonda(oText,nDec) {
	// esce se la stringa = ""
	if (oText.value.toString() == "") {
		return;
	}
	num = parseFloat(oText.value);
	num = Math.round(num*Math.pow(10,nDec))/Math.pow(10,nDec);
	txtNum = num.toString();
	arrNum = txtNum.split('.');
	if (arrNum.length > 1) {
		arrNum[1] = rightPadZeros(arrNum[1],nDec);
		numStr = arrNum.join(".");
	} else {
		numStr = arrNum[0] + "." + rightPadZeros(0,nDec);
	}
	oText.value = numStr;
}
function padSpaces(num,totalLen) {
	var numStr = num.toString() 					// Initialize return value as string
	var numZeros = totalLen - numStr.length	// Calculate no. of zeros
	if (numZeros > 0) {
		for (var i = 1; i <= numZeros; i++) {
			numStr = " " + numStr
		}
	}
	return numStr
}
function rightPadZeros(num,totalLen) {
	var numStr = num.toString() 					// Initialize return value as string
	var numZeros = totalLen - numStr.length	// Calculate no. of zeros
	if (numZeros > 0) {
		for (var i = 1; i <= numZeros; i++) {
			numStr = numStr + "0";
		}
	}
	return numStr
}
function toNum(txtNum) {
	if (txtNum == "") {
		return 0;
	}
	return parseFloat(txtNum);
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it



L'oggetto Number possiede, in versioni non troppo arcaiche di javascript, il
metodo "toFixed", che fa più o meno ciò che chiedi. Ovviamente, se il
parametro è stringa lo devi prima trasformare in numero.
Esempio:
	var str = "145145.125";
	alert( parseFloat(str).toFixed(2) );
Nota: Il valore di ritorno di toFixed è stringa.
Il punto è che arrotonda. Nel senso che 145145.125 diventa 145145.13. Tu
desideri invece troncare? (ovvero, anche se si trattasse di .129, ottenere .12
invece di .13)
Cmq sia, nei browser che non supportano in javascript il metodo toFixed, puoi
implementarlo con questa funzione che scrissi tempo fa:
Number.prototype.toFixed=function(n) { 
	if (n>0) {
		var num=Math.abs(this),m=(num>=0 && num<1)?1:0;
		num+=m;
 		num=new String(Math.round(num*new Number("1e+"+n))).replace(new
RegExp("(\\d+)(\\d{"+n+"})$"),"$1.$2");
 
 		return (this<0?"-":"")+(m?"0"+num.substr(1):num);
 	} else
 		return new String(Math.round(this)); 
}
In verità ti conviene utilizzarla ugualmente, anche laddove è supportato
(almeno io faccio così) per ottenere risultati omogenei.
Il fatto è che IE talvolta dà dei risultati diversi. Ad esempio:
	0.008 = > toFixed(2) => 0.00
Mentre sia FF che la mia funzione restituiscono "0.01".
-- 
"E' un vero peccato che tutte le persone che sanno come far funzionare 
il Paese siano troppo occupate a guidare taxi o a tagliare capelli."
(George Burns)

 TP/BP/Delphi/jscr/&c, FAQ items, links.