1
resposta

Por que o salário do André ficou como "3300,0000000000005"?

Não entendi o porquê o salário do André, após o aumento, foi exibido como 3300,0000000000005. A conta não seria 3000 x 1,1? Então o resultado deveria ser apenas 3300, certo?

Também, depois de sobrescrever o método de maneira que o aumento fosse para 15%, o resultado continuou estranho. O salário foi para 3449,9999999999995, quando na verdade 3000 x 1,15 = 3450.

Alguém sabe de onde vem essa diferença de 0,0000000000005?

1 resposta

Gabriel,

Eu sei que é um problema antigo de processador da máquina X variável Double.

A solução... a função Math.Round(), a função Math.Floor() ou a função Math.Ceiling().

Veja também:

==========================================================

Fixing double arithmetic errors

https://codereview.stackexchange.com/questions/62651/fixing-double-arithmetic-errors

==========================================================

Arithmetic error when adding two double values [duplicate]

https://stackoverflow.com/questions/7719745/arithmetic-error-when-adding-two-double-values

==========================================================

Arredonde um valor duplo para um valor inteiro em C#

https://www.delftstack.com/pt/howto/csharp/round-double-to-int-in-csharp/#:~:text=Arredonde%20um%20valor%20duplo%20para%20um%20valor%20inteiro,que%20%C3%A9%20arredondado%20para%20o%20inteiro%20mais%20pr%C3%B3ximo.

==========================================================

[]'s,

Fabio I.