fix: use symmetric rounding for negative amounts in formatGermanAmount

This commit is contained in:
Bastian Wagner
2026-08-03 21:16:05 +02:00
parent c6df6a6d38
commit 0b408f7d73
2 changed files with 12 additions and 1 deletions

View File

@@ -155,4 +155,15 @@ describe('buildCsv', () => {
'2026-08-05;Zahlung;Alex Muster;Test;1,01;1,01', '2026-08-05;Zahlung;Alex Muster;Test;1,01;1,01',
); );
}); });
it('rounds negative half-cent boundaries correctly', () => {
const csv = buildCsv([
{ date: '2026-08-05T00:00:00.000Z', type: 'expense', who: 'Teamkasse', note: 'Test', amount: -1.005, runningTotal: -1.005 },
]);
expect(csv).toBe(
'Datum;Typ;Wer;Notiz;Betrag;Periodensaldo\r\n' +
'2026-08-05;Ausgabe;Teamkasse;Test;-1,01;-1,01',
);
});
}); });

View File

@@ -68,7 +68,7 @@ const TYPE_LABELS: Record<string, string> = {
}; };
function formatGermanAmount(value: number): string { function formatGermanAmount(value: number): string {
const rounded = Math.round((value + Number.EPSILON) * 100) / 100; const rounded = Math.sign(value) * Math.round((Math.abs(value) + Number.EPSILON) * 100) / 100;
const normalized = rounded === 0 ? 0 : rounded; const normalized = rounded === 0 ? 0 : rounded;
return normalized.toFixed(2).replace('.', ','); return normalized.toFixed(2).replace('.', ',');
} }