Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296

    Trasformare stringhe in numeri decimali e sommarli

    Buonasera a tutti,
    ho difficoltà con javascript del quale conosco davvero poco.
    Il quesito è: in una form php ho più campi nei quali vengono digitati dei valori sotto la forma xx,xx.
    Ho bisogno di calcolare in Javascript la somma di questi valori.
    Dato che i valori contengono una virgola, ho pensato di trasformarli in decimali puri e poi sommarli restituendo il valore della somma in un campo "spesarich" della form.
    La mia soluzione è stata:
    codice:
    function calcolaSpesa(){    costo1 = document.getElementById('costost1').value;
        costo2 = document.getElementById('costost2').value;
        costo3 = document.getElementById('costost3').value;
        costo4 = document.getElementById('costost4').value;
        superficie = document.getElementById('superficie').value;
        costo1= costo1.replace(",",".");
        costo2= costo2.replace(",",".");
        costo3= costo3.replace(",",".");
        costo4= costo4.replace(",",".");
        superficie= superficie.replace(",",".");
        
        var costo1 = parseFloat(costo1).toFixed(2);
        var costo2 = parseFloat(costo2).toFixed(2);    
        var costo3 = parseFloat(costo3).toFixed(2);    
        var costo4 = parseFloat(costo4).toFixed(2);    
        var superficie = parseFloat(superficie).toFixed(2);
        var spesarich = (costo1 + costo2 + costo3 + costo4);
    
    
        document.getElementById("spesarich").innerHTML = spesarich;
    
    
    }
    I valori di "costo1...costo4" sono corretti, ma nel campo "spesarich" mi restituisce il valore dei campi (costo1,costo2,costo3,costo4) intesi come stringhe (per esempio se i valori sono 1.00,2.00,3.00,4.00 restituisce 1.002.003.004.00 e non 10.00). Dove sbaglio?

    Grazie per l'aiuto
    Ultima modifica di otello; 02-08-2021 a 19:03

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,505
    Ciao,

    codice:
     var costo4 = parseFloat(parseFloat(costo4).toFixed(2));
    Il valore di ritorno di toFixed è una stringa.
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    319
    Esempio.

    codice:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <form action="">
            <input type="number" step="any" min="0" max="99" name="price1" value="1.00">
            <input type="number" step="any" min="0" max="99" name="price2" value="2.00">
            <input type="number" step="any" min="0" max="99" name="price3" value="3.00">
            <input type="number" step="any" min="0" max="99" name="price4" value="4.00">
            <button id="calc" type="calc">Calc</button>
        </form>
        <div id="tot"></div>
    
        <script src="test.js"></script>
    </body>
    </html>
    codice:
    const numbers = document.querySelectorAll('input[type=number]')
    const calc = document.getElementById('calc')
    const tot = document.getElementById('tot')
    
    calc.addEventListener('click', e => {
        e.preventDefault()
        calcolaSpesa()
    })
    
    function calcolaSpesa() {
        const numbersArr = [...numbers].map(e => {
            return parseFloat(e.value)
        }).reduce((acc, value) => {
            return acc + value
        }).toFixed(2)
        tot.textContent = numbersArr
    }

  4. #4
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296
    Quote Originariamente inviata da ciro78 Visualizza il messaggio
    Ciao,
    codice:
     var costo4 = parseFloat(parseFloat(costo4).toFixed(2));
    Il valore di ritorno di toFixed è una stringa.
    Questa non me l'aspettavo... grazie 1000

    Ninja72, mi hai dedicato del tempo prezioso, mi dispiace di non avere le conoscenze adeguate per apprezzare fino in fondo la soluzione che mi proponi. Ma ci proverò.
    Grazie anche a te

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da otello Visualizza il messaggio
    Questa non me l'aspettavo...
    Nell'ambito della programmazione, può succedere di attendersi un comportamento o un risultato diverso da quello effettivo, però è anche possibile determinarlo con sicurezza all'occorrenza, rimuovendo tutti i dubbi e le ambiguità, attraverso la documentazione ufficiale.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    319
    C'è un errore non voluto sul type del button che è "submit" e non "calc", sorry
    codice:
    <button id="calc" type="submit">Calc</button>

  7. #7
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296
    Quote Originariamente inviata da alka Visualizza il messaggio
    Nell'ambito della programmazione, può succedere di attendersi un comportamento o un risultato diverso da quello effettivo, però è anche possibile determinarlo con sicurezza all'occorrenza, rimuovendo tutti i dubbi e le ambiguità, attraverso la documentazione ufficiale.

    Ciao!
    Assolutamente d'accordo con quanto affermi, ma converrai che un metodo, che formatta un numero utilizzando la notazione a virgola fissa, non ti aspetti dia come risultato una stringa. Il fatto è che non mi è sorto proprio il dubbio dal quale potesse scaturire il ricorso alla documentazione.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Quote Originariamente inviata da otello Visualizza il messaggio
    un metodo, che formatta un numero utilizzando la notazione a virgola fissa, non ti aspetti dia come risultato una stringa.
    Mi permetto di intervenire... la parola chiave sta proprio in ciò che hai scritto: "formatta un numero".

    Un numero "formattato" è sempre e solo una rappresentazione stringa del suo valore. Un numero, inteso come valore, non ha alcuna "formattazione" (è semplicemente una serie di bit in memoria). Il concetto di numero esula dal come una persona lo possa rappresentare: il fatto di dargli una forma significa esattamente rappresentarlo sottoforma di stringa, quindi avere in mano una stringa.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it L'avatar di otello
    Registrato dal
    May 2003
    Messaggi
    296
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Mi permetto di intervenire... la parola chiave sta proprio in ciò che hai scritto: "formatta un numero".

    Un numero "formattato" è sempre e solo una rappresentazione stringa del suo valore. Un numero, inteso come valore, non ha alcuna "formattazione" (è semplicemente una serie di bit in memoria). Il concetto di numero esula dal come una persona lo possa rappresentare: il fatto di dargli una forma significa esattamente rappresentarlo sottoforma di stringa, quindi avere in mano una stringa.

    Ciao.
    Credo tu abbia ragione, a volte farei bene a ricordare di essere un matematico "prestato" all'informatica e cercare di approfondire anche le cose che do per scontate.

    Grazie

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da otello Visualizza il messaggio
    Il fatto è che non mi è sorto proprio il dubbio dal quale potesse scaturire il ricorso alla documentazione.
    Oltre a quanto ha già scritto nel merito LeleFT, il mio era un suggerimento generale: usi una funzione e non ottieni il comportamento che ti aspetti? Senza indugio, vai subito di documentazione!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.