diff --git a/frontend/components/absence/AbsenceBalanceCards.vue b/frontend/components/absence/AbsenceBalanceCards.vue index 4d831d8..b811b5e 100644 --- a/frontend/components/absence/AbsenceBalanceCards.vue +++ b/frontend/components/absence/AbsenceBalanceCards.vue @@ -102,7 +102,8 @@ const others = computed(() => ) function formatNumber(n: number): string { - return (Math.round(n * 2) / 2).toString() + // Valeur réelle avec décimales (ex. 8,75) : pas d'arrondi qui gonflerait le solde. + return new Intl.NumberFormat('fr-FR', { maximumFractionDigits: 2 }).format(n) } // Total entitlement = acquired (N-1) + in-progress (N); falls back to the diff --git a/frontend/composables/useAbsenceHelpers.ts b/frontend/composables/useAbsenceHelpers.ts index d4dadb7..3921706 100644 --- a/frontend/composables/useAbsenceHelpers.ts +++ b/frontend/composables/useAbsenceHelpers.ts @@ -75,9 +75,11 @@ export function useAbsenceHelpers() { } function formatDays(days: number): string { - const rounded = Math.round(days * 2) / 2 - const unit = rounded > 1 ? t('absences.daysPlural') : t('absences.daySingular') - return `${rounded} ${unit}` + // Affiche la valeur réelle avec décimales (ex. 8,75) : un solde de CP se + // gère en demi/quart de journée, arrondir masquerait des droits réels. + const value = new Intl.NumberFormat('fr-FR', { maximumFractionDigits: 2 }).format(days) + const unit = days >= 2 ? t('absences.daysPlural') : t('absences.daySingular') + return `${value} ${unit}` } return {