// argent.ts — fourchettes, arrondis, annuité d'un prêt. Fonctions pures, // sans formatage (l'affichage « 1 200 € HT » appartient aux sites, pas au // paquet : Intl dépend de l'environnement). export function fourchette(min, max) { return min <= max ? { min, max } : { min: max, max: min }; } export function pointMedian(f) { return (f.min + f.max) / 2; } /** Somme de fourchettes ; une borne manquante est remplacée par l'autre. */ export function additionneFourchettes(liste) { let min = 0; let max = 0; for (const f of liste) { if (f.min == null && f.max == null) continue; const a = f.min ?? f.max ?? 0; const b = f.max ?? f.min ?? 0; min += a; max += b; } return { min, max }; } /** Arrondi au pas donné (pas ≤ 0 → valeur inchangée). */ export function arrondiAuPas(valeur, pas) { if (!pas || pas <= 0) return valeur; return Math.round(valeur / pas) * pas; } /** Arrondi à deux décimales. */ export function arrondi2(n) { return Math.round(n * 100) / 100; } /** * Mensualité d'un prêt à taux fixe (formule d'annuité constante). * @param capital montant emprunté * @param taux_annuel_pct taux nominal annuel en % (0 → capital / nombre de mois) * @param duree_annees durée en années */ export function mensualite(capital, taux_annuel_pct, duree_annees) { const n = Math.round(duree_annees * 12); if (n <= 0 || capital <= 0) return 0; const r = taux_annuel_pct / 100 / 12; if (r === 0) return capital / n; return (capital * r) / (1 - Math.pow(1 + r, -n)); } /** Annuité (12 mensualités). */ export function annuite(capital, taux_annuel_pct, duree_annees) { return mensualite(capital, taux_annuel_pct, duree_annees) * 12; } /** Coût total du crédit (intérêts seuls). */ export function coutDuCredit(capital, taux_annuel_pct, duree_annees) { const n = Math.round(duree_annees * 12); return mensualite(capital, taux_annuel_pct, duree_annees) * n - capital; }