Newsgroup: it.comp.lang.javascript
Titolo: Formato numeri decimali

In un precedente post ho  recuperato una  funzione per formattare numeri
con virgola e  due decimali che funziona correttamente quando i numeri sono
positivi.
Non ricordo l'autore  ma lo rimgrazio ancora e comunque. (Deve essere uno di
quelli che solitamente rispondono da queste parti).
La domanda è questa: è possibile avere anche la versione che funziona quando
i numeri sono negativi.
Ecco la funzione da sistemare:
 function f(nx,nxDec){
      nxDec=nxDec?nxDec:0;
      var partInt = parseInt(nx,10).toString();
      var partDec =
Math.round((nx-partInt+1)*Math.pow(10,nxDec)).toString();
      partDec=(partDec.length==1)?"":","+partDec.substr(1,partDec.length);
      for(var i=partInt.length-3;i>0;i-=3)
         partInt=partInt.substr(0,i)+"."+partInt.substr(i,partInt.length)
      return partInt+partDec;
  }
Ancora grazie e buone vacanze.
FaLa

 funziona quando i numeri sono negativi.
Per aggiustare la funzione dovresti aggiungere, all'inizio, queste due
istruzioni:
    var segno = nx < 0 ? "-":"";
    nx = Math.abs(nx);
e sostituire l'ultima istruzione con:
    return segno+partInt+partDec;
Perň, mi sembra piů semplice quest'altro script:
    function fx(nx, nxDec) {
        var temp = Math.pow(10, nxDec);
        var x =  new String(Math.round(nx * temp) / temp);
        while (x.substring(x.lastIndexOf('.') + 1).length < nxDec)
            x += "0";
         return x;
    }
Maurizio.

, 
falavignT...@libero.it
 says...

A volo ti suggerirei di controllare prima se il numero in ingresso sia 
negativo o meno e di settarti un flag, poi lo trasformi in positivo, lo fai 
sistemare dalla funzione e se il flag era settato aggiungerci un "-" davanti 
(ricorda che in uscita hai una stringa).
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

 istruzioni:
Scusa Maurizio.
La tua risposta era nascosta (non avevo scrollato completamente la finestra) 
e non me n'ero accorto :-))



...e, attenzione: se n=1.00, fx(n,4)==1000

 ...e, attenzione: se n=1.00, fx(n,4)==1000
Nessuno č esente da bug :-) thanks
Per AF, visti i bug che sono venuti fuori ti riscrivo la versione (speriamo)
corretta:
    function fx(nx, nxDec) {
        var temp = Math.pow(10, nxDec);
        var x =  new String(Math.round(nx * temp) / temp);
        if (x.lastIndexOf('.') < 0)
            x += '.';
        while (x.substring(x.lastIndexOf('.') + 1).length < nxDec)
            x += "0";
        return x;
    }
Oppure, se vuoi che ti vengano messi i punti  di separazione delle migliaia
e la virgola decimale:
    function fy(nx, nxDec) {
        function gy(x) {
            var k = x.length;
            return k  > 3 ? g(x.substring(0, k - 3)) + "." + x.substring(k -
3) : x;
        }
        function hy(y) {
            return y.length < nxDec ? hy ("0" + y) : y;
        }
        var segno = nx < 0 ? "-" : "";
        nx = Math.abs(nx);
        var temp = Math.pow(10, nxDec);
        var x =  Math.round(nx * temp);
        return segno + gy("" + Math.floor(x / temp)) + "," + hy("" + x %
temp);
}
Maurizio.

 La tua risposta era nascosta
Non vedo problemi. A me sembra più costruttivo quando vi sono piu` persone
che rispondono.
Maurizio.

Mmmmm
stavo pensando ....
potrň beh integrare scipt JSP all'interno di Javascrpt ..... ??
Per farlo dventare dinamico ..... se no sono spacciato ...
visto che le date le tiro su da BD Oracle!
Le 2 select hanno valori che dipendono da quelli nella bd!
Lunedi proverň poi ... gia che sono qua (giorno del mio compleanno :-)) )
a pensarci ......
CMQ grazie ... provo a smanettarci dentro al max ti farô sapere...
CIAOOO
POL

SCUSATE CANNATO :-(