Errore di calcolo di sottrazione su EXCEL su due numeri con tre decimali

Anonimo
2010-11-09T15:22:45+00:00

Buongiorno, ho un problema con un foglio excel infatti in una sottrazione tra due numeri con tre decimali mi da un risultato sbagliato, posto l'esempio:

******************************************************

A2= 3,002

B2= 3,004

C2= 0,002        FORMULA  =B2-A2

D2= FALSO       FORMULA  =C2<=0,002

******************************************************

I campi numerici sono di tipo "Numero" con 3 posizioni decimali, se utilizzo la funzione "Valuta formula" su D2 mi dice che il campo C2 è "0,00200000000000022" superando di fatto le 15 posizioni decimali, ma sia A2 che B2 sono valori che ho inserito io manualmente.

La cosa più strana è che se metto qualsiasi valore diverso da 3,002 e 3,004 funziona!!!!! (Es. 4,002 e 4,004)

Fate una prova voi stessi, penso sia un baco di Excel!

ps. Ho già letto le risposte all'articolo dell'8 ottobre 2010 ma il problema non è il medesimo infatti ho provato a creare un foglio nuovo e inserendo questi dati il problema persiste.

Se qualcuno può aiutarmi gli sarò grato.

Saluti Christian

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2010-11-09T17:20:50+00:00

 L'errore non è da imputare a nessun bug di Excel e nel post citato(almeno credo sia quello, non hai messo il link) se ricordo bene Marcello ha dato una spiegazione.

Il thread era questo:

http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/thread/767cac85-4561-4be1-8836-3e3e390263ff

Come hai scritto non si tratta di un bug di excel ma di un limite intrinseco della rappresentazione binaria dei numeri decimali.

Si veda: http://it.wikipedia.org/wiki/IEEE_754

Ciao.


Marcello F.

MCP - MCTS

Microsoft Product Support Service EMEA

 Se questo post ti è stato utile, clicca su “Vota come utile

In questo modo aiuterai gli altri utenti a trovare la soluzione al problema.

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2010-11-09T15:50:19+00:00

<cut>

Aggiungo. Questa routine:

Public Sub a()

    Debug.Print 3.004 - 3.002

End Sub

 da sempre questo risultato: 2,00000000000022E-03  (lo stesso che hai nella cella) nel vb di Excel, di Word, nel vb6

Ho fatto una ulteriore prova in C#:

private void button1_Click(object sender, EventArgs e)

{

        MessageBox.Show((3.004 - 3.002).ToString());

}

e il risultato che ottengo è lo stesso. L'errore non è da imputare a nessun bug di Excel e nel post citato(almeno credo sia quello, non hai messo il link) se ricordo bene Marcello ha dato una spiegazione.

Il problema si risolverebbe in vb in questo modo:

Public Sub m()

    Debug.Print CCur(3.004) - CCur(3.002)

End Sub


--

La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

--

Mauro Gamberini - Microsoft© MVP(Excel)

http://www.maurogsc.eu/

La risposta è stata utile?

0 commenti Nessun commento

2 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-11-09T17:39:05+00:00

    Il thread era questo:

    http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/thread/767cac85-4561-4be1-8836-3e3e390263ff

    Come hai scritto non si tratta di un bug di excel ma di un limite intrinseco della rappresentazione binaria dei numeri decimali.

    Si veda: http://it.wikipedia.org/wiki/IEEE_754

    Perfetto, grazie Marcello.


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2010-11-09T15:35:22+00:00

    Buongiorno, ho un problema con un foglio excel infatti in una sottrazione tra due numeri con tre decimali mi da un risultato sbagliato, posto l'esempio:

    ******************************************************

    A2= 3,002

    B2= 3,004

    C2= 0,002        FORMULA  =B2-A2

    D2= FALSO       FORMULA  =C2<=0,002

    ******************************************************

    I campi numerici sono di tipo "Numero" con 3 posizioni decimali, se utilizzo la funzione "Valuta formula" su D2 mi dice che il campo C2 è "0,00200000000000022" superando di fatto le 15 posizioni decimali, ma sia A2 che B2 sono valori che ho inserito io manualmente.

    La cosa più strana è che se metto qualsiasi valore diverso da 3,002 e 3,004 funziona!!!!! (Es. 4,002 e 4,004)

    Fate una prova voi stessi, penso sia un baco di Excel!

    ps. Ho già letto le risposte all'articolo dell'8 ottobre 2010 ma il problema non è il medesimo infatti ho provato a creare un foglio nuovo e inserendo questi dati il problema persiste.

    Se qualcuno può aiutarmi gli sarò grato.

    Saluti Christian

    Excel può avere problemi con i calcoli in virgola mobile. Comunque:

    C2: =ARROTONDA(B2-A2;3)


    --

    La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.

    --

    Mauro Gamberini - Microsoft© MVP(Excel)

    http://www.maurogsc.eu/

    La risposta è stata utile?

    0 commenti Nessun commento