Problemi con double data type

di il
9 risposte

Problemi con double data type

Ho una tabella relativa al riepilogo mensile delle timbrature lavorative (cartellino-badge)
I campi interessati sono così valorizzati (per fare un esempio)
GG_LAV_MESE (byte) = 22 --> giorni lavorativi del mese in questione
GG_LAV_SETT (byte) = 5 --> giorni lavorativi settimanali (da contratto)
ORE_LAV_SETT (byte) = 36 --> ore lavorative settimanali (da contratto)
ORE_CONT (double) = 6,6 --> totale ore lavorate/contabilizzate nel mese in questione
(che corrispondono a 158h e 24min, cioè esattamente il debito mensile)
va vba ho una variabile di tipo double che chiamo DOVUTO che calcolo così:
DOVUTO=ORE_LAV_SETT/GG_LAV_SETT *GG_LAV_MESE /24
mi aspetto che esca 6.6 e se visualizzo in un controllo (di una form) questo valore in effetti vedo 6.6 (6,6 a video) ma se faccio una semplice sottrazione
PROVA=DOVUTO-6.6 non da 0 ma -8.881784....E-16
ma perchè ?!?

9 Risposte

  • Re: Problemi con double data type

    Il problema è aggirabile nel senso che posso facilmente eliminare i decimali oltre la soglia dell'equivalente di 1 minuto però ...
  • Re: Problemi con double data type

    Virgola mobile, arrotondamenti... ti dice nulla...?
    Il Double non è un Type preciso... soprattutto se si fanno operazioni di calcolo.

    Questo errore accade SPESSO quando qualcuno usa il Double per contabilità... tant'è che c'è appunto il TYPE=Currency o Valuta.

    Da VBA per i calcoli precisi su cui non si vuole l'arrotondamento dovuto alla questione VIRGOLA MOBILE, si usa il DECIMAL, che però è disponibile come VarType e non come FieldType...

    https://docs.microsoft.com/it-it/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result

    Da quì la soluzione la devi trovare tu in base a quello che ti serve...!
  • Re: Problemi con double data type

    In realtà me ne ero già accorto ma non ho mai dovuto affrontare la questione "operazioni coi double".
    Di solito mi appoggio a DB tipo SQL-Server e ho sempre utilizzato altri formati, tipo CURRENCY in caso di importi.
    Questo progetto è una richiesta di un amico e mi appoggio ad una banca dati accdb.
    Non ho mai avuto a che fare con orari >24h per cui invece di memorizzarli come faccio di solito come Date/time ho pensato al double.
    ok quindi è corretto arrotondare? (intendo nel mio caso in cui faccio riferimento ad orari)
  • Re: Problemi con double data type

    muttley005 ha scritto:


    ORE_CONT (double) = 6,6 --> totale ore lavorate/contabilizzate nel mese in questione
    (che corrispondono a 158h e 24min, cioè esattamente il debito mensile)
    Valorizzi a 6,6 un campo che si chiama ORE_CONT che equivalgono a 158h e 24 minuti? che strana 'sta cosa.
    E' ipotizzabile memorizzare in minuti e solo alla fine trasformare in ore?
    Anche il formato currency non soffre dei problemi della virgola mobile, come hai già visto e supporta fino a 4 decimali.
  • Re: Problemi con double data type

    Perché non usi un tipo intero e basta?
  • Re: Problemi con double data type

    @Phil:
    è la conversione della data/tempo in double ... forse intendevi il nome ORE_ che sarebbe stato + corretto TIME_ ?

    @Phil+Oregon:
    in effetti potrei semplicemente memorizzare i minuti usando il tipo intero ... come ho fatto a non pensarci
    poi in fase di visualizzazione converto
  • Re: Problemi con double data type

    muttley005 ha scritto:


    @Phil:
    è la conversione della data/tempo in double ... forse intendevi il nome ORE_ che sarebbe stato + corretto TIME_ ?
    Prosegui pure con quello che hai in mente, i miei tra l'altro sono solo spunti di riflessione, non ho mai visto un archivio dati di rilevazione presenze. Di sicuro però non puoi salvare in un campo data/ora un intervallo di tempo. Ma lascia stare, queste cose le sai già e forse non ho capito il contenuto di quelle due righe nel post di apertura.
  • Re: Problemi con double data type

    muttley005 ha scritto:


    @Phil:
    è la conversione della data/tempo in double ... forse intendevi il nome ORE_ che sarebbe stato + corretto TIME_ ?

    @Phil+Oregon:
    in effetti potrei semplicemente memorizzare i minuti usando il tipo intero ... come ho fatto a non pensarci
    poi in fase di visualizzazione converto
    Alla fine gestisci tutte le operazioni con unità MINUTO... di fatto, che poi convertirai in gg/hh/mm con banalissimi calcoli.
    Se il tempo massimo è il mese allora Integer va bene, se supera usa Long.
  • Re: Problemi con double data type

    @Alex ha scritto:


    ...
    Alla fine gestisci tutte le operazioni con unità MINUTO... di fatto, che poi convertirai in gg/hh/mm con banalissimi calcoli.
    Se il tempo massimo è il mese allora Integer va bene, se supera usa Long.
    esattamente
    grazie Phil, Alex e Oregon, mi stavo perdendo in un bicchiere d'acqua
Devi accedere o registrarti per scrivere nel forum
9 risposte