Esta é uma pequena amostra do que tenho em meu banco de dados.
CREATE TEMPORARY TABLE temp_ledger(
book_entry INT,
credit DOUBLE(24, 8),
debit DOUBLE(24, 8)
);
INSERT INTO
temp_ledger(book_entry, credit, debit)
VALUES
(1, 17.54500000, 0.00000000),
(1, 0.00000000, 14.50000000),
(1, 0.00000000, 3.04500000),
(2, 0.00000000, 99.85500000),
(2, 95.10000000, 0.00000000),
(2, 4.75500000, 0.00000000);
SELECT
book_entry,
SUM(ROUND(debit, 2)) as sum_of_rounded_debit,
SUM(ROUND(credit, 2)) as sum_of_rounded_credit,
ROUND(SUM(debit), 2) as round_of_summed_debit,
ROUND(SUM(credit), 2) as round_of_summed_credit,
SUM(debit) as summed_debit,
SUM(credit) as summed_credit
FROM
temp_ledger
GROUP BY
book_entry;
DROP TEMPORARY TABLE temp_ledger;
Saída
temp_ledger
entrada_livro | soma_de_débito_arredondado | soma_de_crédito_arredondado | round_of_summed_debit | round_of_summed_credit | débito_somado | crédito_sumado |
---|---|---|---|---|---|---|
1 | 17,54 | 17,55 | 17,55 | 17,55 | 17.54500000 | 17.54500000 |
2 | 99,86 | 99,86 | 99,86 | 99,85 | 99.85500000 | 99.85500000 |
Não entendo por que sum_of_rounded_debit
a entrada do livro 1 é 17,54 :
- 14,50 arredondado deve ser 14,50
- 3,045 arredondado deve ser 3,05
E round_of_summed_credit
para o lançamento contábil 2 é 99,85 se summed_credit for 99,855 , por que o arredondamento me dá 99,85 e não 99,86
Eu entendo que às vezes os decimais podem ser complicados, mas round_of_summed_credit
em particular me pergunto "O quê?".
Isso surgiu ao tentar encontrar erros na tabela llx_accounting_bookkeeping de Dolibarr, uma vez que a soma da rodada fornece algumas linhas como incompatíveis entre crédito e débito, enquanto a soma da rodada fornece um conjunto diferente de linhas.
Usando MariaDB 10.5.8