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

Vorrei sapere come posso inserire un numero con la notazione tradizionale in
una risposta. Mi spiego meglio ho fatto un semplice script che esegue
un'operazione, ma il risultato a volte è con molti decimali (es.
123.179999999999) vorrei invece ottenere come risposta un numero arrotondato
e separato da virgola come 123,18 grazie

Math.round(numero*100)/100;

Grazie, perfetto. Vorrei chiederti ancora una cosa :
sto cercando di realizzare tramite un form una tabella di conversione.
Funziona tutto perň cercavo un modo per rendere piů compatto il tutto. Ecco
una parte del mio lavoro
<SCRIPT LANGUAGE="JavaScript">
 function mBar1(form)  {
if ((form.bar.value.substring() < '0') || (form.bar.value.substring() >
'9'))
      alert('Devi immettere solo numeri!!');
     else
  form.result1.value = (form.bar.value * form.test.a)
      form.unit.value = form.test.value}
</script>
<TABLE WIDTH=478 BORDER=2 align="center">
  <FORM>
<TR>
      <TH BGCOLOR="#33CC33" WIDTH=27%>Inserisci il valore in BAR</TH>
<TH BGCOLOR="yellow" WIDTH=28%><INPUT TYPE="text" NAME="bar" SIZE=5></TH>
      <TH BGCOLOR="#0033FF" WIDTH??=10%>
<INPUT TYPE="BUTTON" VALUE="mBAR" NAME="test" a="1000"
ONCLICK="mBar1(this.form)">
    </TR>
<TR>
      <TH BGCOLOR="lightblue" WIDTH=27%>Risultato:
        <INPUT TYPE="text" Name="result1"size=2>
<INPUT TYPE="text" Name="unit" size=8>
      </TH>
      <TH BGCOLOR="lightblue"WIDTH=28%>
<INPUT TYPE="RESET" VALUE="Cancella">
      </TH>
</TR>
</FORM>
</TABLE>
Pensavo che per aggiungere una categoria da convertire bastasse riscrivere
il tutto aggiornato, ma se non rinomino il form button (NAME) non funziona.
Come posso fare per rendere tutto il piů compatto possibile ?
Spero di essermi spiegato, altrimenti fammi sapere, e grazie ancora.

> Pensavo che per aggiungere una categoria
Cosa intendi per categoria?

 bastasse riscrivere il tutto aggiornato,
Vorresti forse aggiungere un altro pulsante che ti permetta di convertire in
un'altra unità di misura?
In questo caso, temo che dovrai passare alla funzione almeno un altro
parametro che renda noto alla funzione stessa il pulsante che hai premuto.
Tieni presente che quell'attributo "a" che hai aggiunto nel tag <input>
viene riconosciuto solo da IE. Gli altri browser riportano "NaN".
Io vedo più logico passare alla funzione 3 parametri: il form, il valore e
il fattore di conversione:
    function mbar1(form, unit, fact) {
        ...
      form.result1.value = (form.bar.value * fact);
      form1.unit.value = unit;
    }
che richiamerei con:
    <INPUT TYPE="BUTTON" value="mbar" ONCLICK="mBar1(this.form, value,
1e3)">
    <INPUT TYPE="BUTTON" value="barie" ONCLICK="mBar1(this.form, value,
1e6)">
Maurizio.

Vi ringrazio per l'aiuto. Ho aspettato a rispondervi perchè prima volevo
provare  a  far girare lo script. Funziona perfettamente e fa esattamente
quello che  avevo in mente.
Quindi un vero grazie a Cristiano e uno a Maurizio che ha colto esattamente
il mio bisogno.
Però come dice il proverbio "l'appetito vien mangiando". A questo punto lo
script  lavora correttamente, come già vi ho detto e mi ritengo già
soddisfatto, ma se volessi che i risultati di queste operazioni apparissero
come si usano correntemente in Italia ?
Cioè invece di avere 123112.032 vorrei che per la risposta si visualizasse
123.112,032 come posso fare ?
Grazie

Io per abitudine uso questo script, se cerchi in giro ci sono perņ esempi
con regexp per farlo su una riga;
prima devi convertire il punto in virgola:
String(tuonumero).replace(/\./,",");
Poi:
function formatnumber(s) {
  var neg="";
  if (String(s).substr(0,1)=="-") {
   neg="-";
   s=String(s).substr(1);
  }
  for (var
i=(String(s).indexOf(",")+1?String(s).indexOf(","):String(s).length)-3;i>0;i
-=3)
   s=String(s).substring(0,i)+"."+String(s).substring(i,String(s).length);
  return neg+s;
 }

Non ho capito come devo fare. La funzione che ho fatto per la conversione è
(vedi Maurizio):
function Conv1(form,unit,fact)  {
if ((form.bar.value.substring() < '0') || (form.bar.value.substring() >
'9'))
      alert('Devi immettere solo numeri!!');
     else form.risulta.value = (form.bar.value * Math.round(fact*100)/100)
      form.unit.value = unit}
Il calcolo è eseguito dalla seconda parte dopo il controllo dell' imissione
dati.
form.risulta.value è il risultato dell' operazione che va riconsegnato al
form
Quindi nel form c'è <input size=16 name=risulta> dve appunto scrive il
numero finale.
Ciao

       form.unit.value = unit}
else form.risulta.value = formatnumber(String(form.bar.value *
Math.round(fact*100)/100)).replace(/\./,","));

 Ho provato a mettere la stringa copiandola da else, ma purtroppo mi dice
che c'è un errore nella visualizzazione della pagina e non esegue più
l'operazione. Mi sembra ci siano un pò troppe  parentesi tonde chiuse. Ho
provato a cambiarle, ma il problema resta. Ciao

 > Math.round(fact*100)/100)).replace(/\./,","));
Sì, c'è una parentesi di troppo (già che ci sono converto in Number il value
del tag):
 else form.risulta.value =
formatnumber(String(Number(form.bar.value)*Math.round(fact*100)/100)).replac
e(/\./,",");

 Ho ricopiato la suddetta riga, ma non mi funziona. Poi ho notato che ci
sono più parentesi tonde chiuse di quelle aperte, ho provato a toglierne
una, ma ancora non va. Ciao

 e(/\./,","));
Forse č:
formatnumber(String(Math.round(Number(form.bar.value)*fact*100)/100)).replac
e(/\./,","));
Maurizio.

 if ((form.bar.value.substring() < '0') || (form.bar.value.substring() >
Se funziona č stranissimo...substring() lavora su stringhe, e form.bar.value
non lo č; inoltre se bar č il nome della form (presumo) manca il nome del
campo, non credo abbia senso un value riferito a una form

 ha scritto nel messaggio
news:ar31vl$f5pbd$1...@ID-147253.news.dfncis.de...

Si, lo script č proprio cosě, e benchč sia strano funziona. Provalo !
Bar č il nome del campo dove l'utente inserisce il valore da far convertire.
Questa parte della funzione serve solamente a verificare che i valori
immessi siano solo numeri.
<SCRIPT language=JavaScript>
function Conv1(form,unit,fact)  {
if ((form.bar.value.substring() < '0') || (form.bar.value.substring() >
'9'))
      alert('Devi immettere solo numeri!!');
     else form.risulta.value = (form.bar.value * Math.round(fact*100)/100)
      form.unit.value = unit}
</SCRIPT>
Se la verifica va a buon fine si passa con else alla parte dedicata al
calcolo.
form.risulta.value č il risultato che va riportato nel form
form.bar.value come detto reperisce il valore immesso dall'utente da
convertire
math.round(fact*100)/100 č il fattore di conversione da moltiplicare (valore
costante)
form.u nit.value riporta il valore di conversione (mbar, bar, psi, ...), non
serve per il calcolo.

Non ho però capito se hai risolto...

Dunque, così funziona tutto. Quello che cercavo era una finezza in più,
cioè poter far apparire il risultato dei decimali con la virgola anzichè con
il punto.  Se poi non ci si riesce pazienza, sono già contento così. Ciao

String(tuastringa).replace(/\./,","); (da farsi prima di formatnumber)

 Mi spiace ma non riesco a farlo funzionare ne in un modo, ne nell' altro.
Senti, lo script non ho avuto il tempo di guardarlo. Appena possibile
cercherň di farlo. Perň, il S.I. ci insegna che kPa e kg si scrivono con k
minuscola. Anche bar si scrive con la b minuscola. Inoltre fra i multipli
del Pa piů usati c'č l'hPa, da preferire al mbar.
Maurizio.

 Mi spiace ma non riesco a farlo funzionare ne in un modo
Guarda se cosě ti funziona:
    <SCRIPT language=JavaScript>
    <!--
    function format(n) {
     n = String(Math.round(n * 100));
     nx = n.substring(n.length-2);
     n = n.substring(0, n.length - 2);
     for (var i = n.length; (i -= 3)> 0;)
      n = n.substring(0, i) + "." + n.substring(i);
     return n + "," + nx;
    }
    function Conv1(form,unit,fact)  {
        if ((form.bar.value.substring() < '0') ||
(form.bar.value.substring() > '9'))
            alert('Devi immettere solo numeri!!');
      else {
        form.risulta.value = format(form.bar.value * fact);
        form.unit.value = unit}
    }
    // -->
    </script>
<table width=100% border=2 align="center" cellspacing="0"
bordercolor="#0000FF">
<form>
      <tr>
        <th width=112 height="41" bgcolor="#FFFFFF"><font color="#000000"
size="2">Inserisci
          il valore in bar</font></th>
        <th bgcolor="yellow" width=47 bordercolor="#FFFF00"
height="41"><input type="text" name="bar" size=15>
      </th>
        <th width="58" height="41" bordercolor="#00CCCC" width??=10%>&nbsp;
        <th width="72" bgcolor="#00CCcc" width??=10% bordercolor="#00CCCC"
height="41">
        <INPUT TYPE="BUTTON" value="mbar"
ONCLICK="Conv1(this.form,value,1e3)">
        <th width="72" bgcolor="#00CCCC" width??=10% bordercolor="#00CCCC"
height="41">
         <INPUT TYPE="BUTTON" value="Pa"
ONCLICK="Conv1(this.form,value,1e5)">
        <th width="65" bgcolor="#00CCCC" width??=10% bordercolor="#00CCCC"
height="41">
            <input type="BUTTON" value="kPa"
ONCLICK="Conv1(this.form,value,100)">
        <th width="112" bgcolor="#00CCCC" width??=10% bordercolor="#00CCCC"
height="41">
            <input type="BUTTON" value="mmHg @0&deg;C"
ONCLICK="Conv1(this.form,value,750.0617)">
        <th width="105" bgcolor="#00CCCC" width??=10% bordercolor="#00CCCC"
height="41">
            <input type="BUTTON" value="mH2O @4&deg;C"
ONCLICK="Conv1(this.form,value,10.197162)">
        <th width="97" bgcolor="#00CCCC" width??=10% bordercolor="#00CCCC"
height="41">
            <input type="BUTTON" value="kg/cm2"
ONCLICK="Conv1(this.form,value,1.0197162)">
        <th width="94" bgcolor="#00CCCC" width??=10% bordercolor="#00CCCC"
height="41">
            <input type="BUTTON" value="PSI"
ONCLICK="Conv1(this.form,value,14.5038)">
      </tr>
  <tr>
      <th><font color="#000000" size="2">Risultato:</font></th>
    <td>
<input type="text" name="risulta" size=15>
    </td>
    <td colspan="8">
        <input type="text" name="unit" size=15 class="testo">
    </td>
  </tr>
</form>
</table>
Maurizio.

 Cosě funziona:
else form.risulta.value = String(form.bar.value *
Math.round(fact*100)/100).replace(/\./,",");
perň senza formatnumber. Grazie