Visualizzazione dei risultati da 1 a 8 su 8

Discussione: errore somma decimali

  1. #1

    errore somma decimali

    Ho un problema. Se sommo i valori due campi con questa funzione
    document.csapp.totale.value = dp(eval(document.csapp.disponibilita.value) + eval (document.csapp.finanziamenti.value));
    ed uno dei due è negativo il valore è quasi sempre esatto. Ho detto quasi sempre perchè se ho una somma simile a questa 20.15 + (- 15.10) mi dà 9.99. Cosa sbaglio? Come posso correggere questo errore?

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    invece di usare la funzione eval usa la funzione parseInt o parseFloat
    basta fare una ricerca in rete o qui nel forum per vedere qualche esempio
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    Grazie, adesso provo.

  4. #4
    Ho provato con entrambe le funzioni ma con la prima calcola solo gli interi prima della virgola, con il secondo non cambia nada 20.15 sommato a -10.15 dà sempre 9.99 (stessa cosa per 21.15 sommato a -10.15 che dà 10.99.
    La funzione che uso è questa:

    function dp (price)
    {
    string = "" + price;
    number = string.length - string.indexOf('.');
    if (string.indexOf('.') == -1)
    return string + '.00';
    if (number == 1)
    return string + '00';
    if (number == 2)
    return string + '0';
    if (number > 3)
    return string.substring(0,string.length-number+3);
    return string;
    }


    e poi , come ho scritto prima, ho questo:

    document.csapp.totale.value = dp (eval(document.csapp.disponibilita.value) + eval (document.csapp.finanziamenti.value));

    Ciao.

  5. #5
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    codice:
    <body>
    <input type="text" value="20.15" id="c1" />
    <input type="text" value="-10.15" id="c2" />
    
    
    <script>
    a = parseFloat(document.getElementById('c1').value);
    b = parseFloat(document.getElementById('c2').value);
    
    somma = (Math.round(a*100) + Math.round(b*100)) / 100;
    
    alert(somma);
    </script>
    
    </body>
    per le info leggi questo post
    http://forum.html.it/forum/showthrea...33#post9360433


    Ciao
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  6. #6
    Ti ringrazio per le dritte che mi han fatto vedere qualche lucina. Ma, sarà per l'ora tarda o per la mia arterosclerosi galoppante, ho qualche difficoltà ad inserire la funzione math.round in quel che ho fatto. Del resto, un po' tontetto sono, visto che ho dato per esplicite informazioni che tanto esplicite non sono:
    in document.csapp.totale.value = dp (eval(document.csapp.disponibilita.value) + eval (document.csapp.finanziamenti.value));
    csapp è il nome con il quale ho identificato il form, mentre totale è il campo che visualizza i risultati della somma degli altri due campi: disponibilita e finanziamenti.
    A dire il vero poi il modulo continua con diversi altri campi con i quali faccio diverse operazioni di somma e sottrazione con le medesime difficoltà (ah, benedetti decimali!)
    Ciao

  7. #7

  8. #8
    Originariamente inviato da fcaldera
    codice:
    <body>
    <input type="text" value="20.15" id="c1" />
    <input type="text" value="-10.15" id="c2" />
    
    
    <script>
    a = parseFloat(document.getElementById('c1').value);
    b = parseFloat(document.getElementById('c2').value);
    
    somma = (Math.round(a*100) + Math.round(b*100)) / 100;
    
    alert(somma);
    </script>
    
    </body>
    per le info leggi questo post
    http://forum.html.it/forum/showthrea...33#post9360433


    Ciao

    E alla fine ci sono riuscito grazie ai suggerimenti e un po' di fusione celebrale:

    document.csapp.totale.value = dp(Math.round(parseFloat(document.csapp.disponibil ita.value)*100 )+ (parseFloat(document.csapp.finanziamenti.value))*1 00)/100;

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.