[RISOLTO] Somma errata con arrotondamento

di il
5 risposte

[RISOLTO] Somma errata con arrotondamento

Ciao,
ho una maschera relativa ad una tabella al cui interno ci sono i campi [Quantita], [Costo], [Sconto] ed infine [Prezzo], il quale quest'ultimo viene calcolato, sull'evento afterupdate, con delle banali moltiplicazioni degli altri tre campi. Quantità è un valore che può essere anche con i decimali, Costo è di tipo valuta ed infine Sconto di tipo percentuale, con una cifra dopo la virgola. Prezzo è di tipo valuta.

Per evitare che venissero fuori valori del prezzo con molte cifre decimali, ho fatto in modo di applicare alla moltiplicazione la funzione Round(----,2), così mi arrotonda a 2 cifre il risultato.
In fondo alla maschera ho una Textbox che non fa altro che sommare tutti i prezzi precedenti, niente di più.
Il problema è il seguente: la somma non sempre è corretta! Ci sono alcune somme che danno il risultato giusto, mentre a volte, altre danno dei valori che sono diversi sui decimali.

Guardate ad esempio questa immagine sotto, dove ovviamente il risultato corretto dovrebbe essere 1.098.824,90 e non ,88.
Quale può essere il problema? Ci sta che round mi cambia solo la visualizzazione a schermo, arrotondando il risultato, ma il numero viene tenuto in memoria con tutte le sue innumerevoli cifre e quindi quando Access va a fare la somma considera anche quelle?
Se fosse così, c'è la maniera di arrotondare a 2 cifre ed essere sicuri di aver eliminato tutti gli altri decimali? Grazie.

5 Risposte

  • Re: [RISOLTO] Somma errata con arrotondamento

    J1mmy ha scritto:


    ...Quantità è un valore che può essere anche con i decimali
    che tipo di dato è?

    J1mmy ha scritto:


    la somma non sempre è corretta! Ci sono alcune somme che danno il risultato giusto, mentre a volte, altre danno dei valori che sono diversi sui decimali.
    Sì, succede.
    In questa pagina Allen Browne fa riferimento al problema degli errori quando ci sono di mezzo i numeri a virgola mobile (floating point), come affrontarli e se può esserti utile una funzione di arrotondamento personalizzata. Ce ne sono altre, in giro, anche di autori italiani, Giorgio Rancati ad esempio: Funzioni di arrotondamento
  • Re: [RISOLTO] Somma errata con arrotondamento

    che tipo di dato è?
    l'ho messo anche integer, ma evidentemente non era lì il problema. Il punto critico è quando interviene la percentuale.
    Alla fine ho provato con una funzione di arrotondamento come mi hai consigliato e dopo un paio di prove sembra funzionare. Prima di inserire il valore del prezzo nel campo richiamo la funzione.
    Ad ogni modo, interessante articolo quello di Allen.
    Grazie per l'aiuto.
  • Re: [RISOLTO] Somma errata con arrotondamento

    Innanzitutto i campi Valuta vanno impostati come Valuta, non "Precisione Singola", non "Precisione Doppia" ,assolutamente NON Intero/Lungo... VALUTA.
    Il motivo è proprio per la tipologia del Dato a Virgola Mobile.
    Questo richiede un minimo di formazione matematica e/o informatica che puoi leggere quì:
    https://docs.microsoft.com/it-it/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result

    Ne consegue che, se usi Dati in virgola mobile subiranno arrotondamenti che ne alterano la precisione del risultato.
    Per ovviare, basta usare il Tipo VALUTA o, nel caso di Variabile VBA Currency che non risente del problema.

    Aggiungo che serve distinguere la Visualizzazione dal Valore, esempio la funzione FORMAT consente di Visualizzare 2 Decimali, ma non altera il valore corretto del dato, cosa invece che modifica la funzione di Arrotondamento.
    Purtroppo la funzione Round del VBA di Access ha un "bug" o in ogni caso non è compatibile ai fini commerciali, quindi si devono usare delle Funzioni che trovi nel WEB come ti ha suggerito Filippo che invece funzionano in conformità alla normativa commerciale.
  • Re: [RISOLTO] Somma errata con arrotondamento

    Purtroppo la funzione Round del VBA di Access ha un "bug" o in ogni caso non è compatibile ai fini commerciali,
    credo che fosse proprio il problema del bug, perché appena ho sostituito la funzione round con quella suggerita da Phil ha funzionato. I tipi di dati erano già valuta, tranne ovviamente quello dello sconto che era percentuale.
    Tra l'altro, cercando in rete, ho trovato anche una funzione analoga in una discussione del 2007 di Alex: sei tu?
  • Re: [RISOLTO] Somma errata con arrotondamento

    Molto probabile sia io... sono vecchio, di Access.
Devi accedere o registrarti per scrivere nel forum
5 risposte