这是我数据库中的一个非常简短的示例。
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;
输出
临时账本
图书条目 | 借方舍入总和 | 舍入信用总和 | 借记总和轮次 | 信用总和轮次 | 借方总和 | 总信用额 |
---|---|---|---|---|---|---|
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 |
我不明白为什么sum_of_rounded_debit
图书条目 1 是17.54:
- 14.50四舍五入应为14.50
- 3.045四舍五入应为3.05
对于round_of_summed_credit
书籍条目 2 来说,如果 summed_credit 是99.855,那么为什么舍入给我的是99.85而不是99.86
我知道有时小数可能很挑剔,但round_of_summed_credit
特别让我想知道“什么?”。
这是试图在 Dolibarr 的 llx_accounting_bookkeeping 表中查找错误,因为总和给出了贷方和借方之间不匹配的某些行,而总和给出了一组不同的行。
使用 MariaDB 10.5.8