Qual è il modo corretto di calcolare i soldi nella programmazione (precisione, ripetendo i decimali) [duplicato]

0

Questa è la prima volta che scrivo un'applicazione (personale) che comporta il calcolo del denaro.

Uno dei potenziali problemi che ho riscontrato riguarda la precisione e la ripetizione dei decimali.

Ex.

1 / 3 = 0.333

0.333 * 3 = 0.999

Dove è andato lo 0,001?

Qual è il modo corretto di eseguire questa operazione senza perdere 0,001 che potrebbe accumularsi in futuro.

    
posta DigitalDouble 18.03.2017 - 03:18
fonte

2 risposte

3
  1. Utilizza il tipo di base 10 disponibile nella tua lingua preferita o nella libreria standard, ad esempio money o decimal , invece dei tipi float o double . I numeri in virgola mobile non sono adatti per i calcoli monetari, perché sono base 2, non base 10, e quindi non rappresenteranno sempre importi monetari in modo accurato.

  2. Utilizza Arrotondamento del banchiere quando effettui calcoli aggregati.

  3. Le buone implementazioni dei numeri di base 10 contengono cifre aggiuntive di precisione oltre i centesimi per ridurre la perdita di precisione nei calcoli. Quindi, se fai tutti i tuoi calcoli e arrotondi solo il risultato finale a pochi centesimi, penso che troverai la risposta giusta.

risposta data 18.03.2017 - 03:57
fonte
0

Quale sarebbe il punto di una divisione per 3 nella tua domanda? Non vedo come questo avrebbe un significato in un tipo di applicazione di questo tipo.

Ad ogni modo, quello che suggerisco è usare librerie che consentono numeri di precisioni aritrarie, qualcosa come queste librerie e limitarle a un massimo di diciamo 50 decimali nel caso in cui i numeri periodici, se necessario, non credo che avresti bisogno di più di quello.

Se in qualche modo trovi un numero in cui è presente un traine di nove, puoi scrivere una funzione per arrotondare al numero più vicino, quindi qualcosa come 4.5849999999 ... 9, verrà arrotondato a 4.585. La possibilità che non sia quel numero in realtà è così bassa che dubito che ci sarebbe più di un caso in diversi miliardi di anni, quindi sembra abbastanza sicuro farlo.

    
risposta data 18.03.2017 - 03:56
fonte

Leggi altre domande sui tag