Newsgroup: it.comp.lang.javascript
Titolo: numero decimale mi vede intero

Scusate ma non ne vengo piu fuori
nella tabella ho il dato 0,40
con queste funzioni purtroppo mi toglie gli zeri e mi scrive 4
mannaggia non ne vengo piu fuori, dove secondo voi sta l'errore
sono le 22.44 e sono lessa
help me...
  //Indica il separatore di decimali del server
  //sui client sarà identico a quello client
  var serverSeparator;
  //Indica il separatore di decimali del client
  //sui client sarà identico a quello server
  var clientSeparator;
  //Regular expression per il controllo della validità
  //globale: (controlla che la virgola sia una sola)
  var globalExpr = new RegExp("["+ top.clientDecimalSeparator +"]"); 
//recupera il separatore lato client dalla finestra top
  //Regular expression per il controllo della validità
  //globale: (controlla che il meno sia uno solo) e sia all'inizio
  var globalExprMeno = new RegExp("[-]");
  //Flag per il controllo del load
  var loaded = false;
  /*
   * Controlla la validità del carattere inserito
   * Il controllo va fatto anche sulla validità della
   * stringa totale: non deve esistere più di una virgola
   */
  function block(){
   var key = String.fromCharCode(event.keyCode);
   if((key == "-")&& !(eval(element.positive.toLowerCase()))){
    //se inserisco un "-" e non è presente, lo aggiungo
    //all'inizio del campo ed esco
    if(!globalExprMeno.test(element.value)){
     element.value = "-" + element.value;
    }
    //in ogni caso il carattere va ignorato
    event.returnValue = false;
    return;
   }
   var strMeno = "";
   if(eval(element.positive.toLowerCase())){
    strMeno = "";
   }
   else{
    strMeno = "-";
   }
   var re = new RegExp(element.filter+"|[" + top.clientDecimalSeparator + 
strMeno + "]"); //recupera il separatore da intraprise.asp e mette il meno 
solo in caso di negativi
   //controlloGlobale vale true se è già presente un separatore
   //decimale e ho digitato lo stesso separatore
   var controlloGlobale = (globalExpr.test(element.value)) && (key == 
top.clientDecimalSeparator);
   //numeroIntero vale true se ho digitato il separatore
   //decimale, ma il numero è intero
   var numeroIntero = (element.subtype.toLowerCase() == "integer") && (key 
== top.clientDecimalSeparator);
   if((!re.test(key)) || controlloGlobale || numeroIntero)
    event.returnValue = false;
   event.keyCode = key.charCodeAt(0);
  }
  /*
   * Converte dal formato presente nel
   * campo al formato di default per il client
   */
  function checkCurrency(){
   //controlla se è stato inserito solo il "meno"
   if(element.value == "-"){
    element.focus();
    return;
   }
   //controlla se il campo contiene valori
   //concordanti con i vincoli di minvalue
   //e maxvalue impostati
   if(!isNaN(element.minvalue)){
    var valoreMinimo = parseFloat(element.minvalue);
    if((element.getValue()<valoreMinimo)&&(element.value!="")){
     event.returnValue = false;
     element.value = element.minvalue;
     element.focus();
     window.setTimeout("document.all." + element.uniqueID + 
".select();",50);
     window.setTimeout("alert('MIN: " + valoreMinimo + "');",60);
    }
   }
   if(!isNaN(element.maxvalue)){
    var valoreMassimo = parseFloat(element.maxvalue);
    if((element.getValue()>valoreMassimo)&&(element.value!="")){
     event.returnValue = false;
     element.value = element.maxvalue;
     element.focus();
     window.setTimeout("document.all." + element.uniqueID + 
".select();",50);
     window.setTimeout("alert('MAX: " + valoreMassimo + "');",60);
    }
   }
   if(element.value != ""){
    if(element.subtype.toLowerCase() == "integer"){
     //se è un intero, formatto a zero decimali
     element.value = formatAsCurrency(element.value,0);
    }
    else{
     if(!isNaN(element.precision)){
      //se è settata una variabile precision (numero decimali)
      element.value = 
formatAsCurrency(element.value,parseInt(element.precision,10));
     }
     else{
      //se non è settata una precisione, uso quella di default
      element.value = formatAsCurrency(element.value,"");
     }
    }
   }
   if(element.getValue()==0){
    element.value = "";
   }
   element.formatted = true;
  }
  /*
   * Inizializza l'oggetto
   */
  function getReady(){
   clientFormat();
   //Elimina eventuali caratteri illegali presenti nel campo
   if(eval(element.positive.toLowerCase())){
    strMeno = "";
   }
   else{
    strMeno = "-";
   }
   var re = new RegExp(element.filter+"|[" + top.clientDecimalSeparator + 
strMeno + "]"); //recupera il separatore da intraprise.asp e mette il meno 
solo in caso di negativi
   var testo = element.value;
   var result = "";
   for(var i=0;i<testo.length;i++){
    if(re.test(testo.charAt(i))){
     result += testo.charAt(i);
    }
   }
   element.value = result;
   allowWriting();
  }
  /*
   * Converte i numeri dal formato server
   * (separatore dei decimali solamente,
   * senza raggruppatore delle migliaia)
   * al formato client formattato secondo
   * le impostazioni internazionali.
   */
  function clientFormat(){
   //se è intero, non serve formattare
   if(element.subtype.toLowerCase() == "integer"){
    loaded = true;
    return;
   }
   //imposta l'attributo title se non è settato
   if(element.title==""){
    element.title = "[0-9]";
   }
   if(element.value == "" || element.formatted){
    loaded = true;
    return;
   }
   //Adesso riceve la stringa come non formattata
   //come currency, quindi sono sicuro che
   //l'unico separatore presente è quello dei decimali
   //e non il raggruppatore delle migliaia
   //cerca il separatore nel formato client
   //sarà l'ultimo carattere non numerico diverso da "-"
   var indice = -1
   for(var i=element.value.length-1;i>=0;i--){
    if((isNaN(element.value.charAt(i)))&&(element.value.charAt(i)!="-")){
     indice = i;
     break;
    }
    else //tutti caratteri numerici, niente separatore -> index = -1
     if(i==0) indice = -1;
   }
   var numeroDecimali = 2; //default
   var decimaliImposti = 2; //default: adesso li calcolo
   if(element.subtype.toLowerCase() == "integer"){
    decimaliImposti = 0;
   }
   else
    if(!isNaN(element.precision)){
     decimaliImposti = parseInt(element.precision,10);
    }
   if(indice > 0){
    serverSeparator = element.value.substring(indice, indice+1);
    var numeroDecimali = element.value.length - (indice +1);
    element.value = element.value.substring(0,indice) + 
element.value.substring(indice+1,element.value.length);
     //formatta con le impostazioni client per numero decimali maggiore di 
zero
    element.value = 
formatAsCurrency(parseInt(element.value,10)/Math.pow(10,numeroDecimali),decimaliImposti);
   }
   else{
    element.value = 
formatAsCurrency(parseInt(element.value,10),decimaliImposti);
   }
   loaded = true;
   element.formatted = true;
  }
  function allowWriting(){
   element.readOnly = false;
  }
  /*
   * Formatta il contenuto della
   * cella in accordo con le impostazioni
   * inernazionali del server
   */
  function serverFormat(){
   //nulla da fare se non è formattato
   //if(!element.formatted) return;
   //deformatta, ma mantiene il separatore client
   var strContent = new String(getAsCurrency(element.value));
   //cerca il separatore nel formato client
   //sarà l'ultimo carattere non numerico diverso da "-"
   var indice = -1
   for(var i=strContent.length-1;i>=0;i--){
    if((isNaN(strContent.charAt(i)))&&(strContent.charAt(i)!="-")){
     indice = i;
     break;
    }
    else //tutti caratteri numerici, niente separatore -> index = -1
     if(i==0) indice = -1;
   }
   if(indice > 0){
    clientSeparator = strContent.substring(indice, indice+1);
    //if(serverSeparator == undefined || serverSeparator==""){
     //se non riesce a recuperare il separatore dal campo
     //lo recupera dalle variabili di applicazione javascript
     serverSeparator = top.serverDecimalSeparator;
    //}
    //toglie il separatore client e mette quello server
    strContent = strContent.substring(0,indice) + serverSeparator + 
strContent.substring(indice+1,strContent.length);
   }
   element.value = strContent;
  }
  /*
   * Restituisce il valore numerico della stringa
   * contenuta nel campo
   */
  function getValue(){
   var stringa = element.value;
   if(stringa == ""){
    //alert("vuoto");
    return 0;
   }
   var indice = -1
   for(var i=stringa.length-1;i>=0;i--){
    if((isNaN(stringa.charAt(i)))&&(stringa.charAt(i)!="-")){
     indice = i;
     break;
    }
    else //tutti caratteri numerici, niente separatore -> index = -1
     if(i==0) indice = -1;
   }
   var numeroDecimali = 2; //default
   numeroDecimali = stringa.length - (indice +1);
   //elimina tutti gli altri caratteri non numero nella stringa
   var filtro = "";
   for(var i=0;i<stringa.length;i++){
    if((isNaN(stringa.charAt(i)))&&(stringa.charAt(i)!="-")){
     //aggiunge il carattere ad una stringa per regular expression
     if(filtro.indexOf(stringa.charAt(i))==-1) filtro += stringa.charAt(i);
     //stringa = stringa.substring(0,i) + 
stringa.substring(i+1,stringa.length);
    }
   }
   if(filtro != ""){
    regular = new RegExp("[" + filtro + "]","g");
    stringa = stringa.replace(regular,"");
   }
   var str = "0";
   var numero = 0;
   if(indice > 0){
    str = stringa;
    //str = stringa.substring(0,indice) + 
stringa.substring(indice,stringa.length);
     //formatta con le impostazioni client per numero decimali maggiore di 
zero
    numero = parseInt(str,10)/Math.pow(10,numeroDecimali);
   }
   else{
    str = stringa;
    numero = parseInt(str,10);
   }
   return numero;
  }

 ha scritto nel messaggio 
news:460ad436$0$4792$4faf...@reader4.news.tin.it...
