Addition de deux variables formatées avec number_format

Fermé
TomLlgDlc - 20 juil. 2016 à 15:11
pierre.lagoutte Messages postés 35 Date d'inscription mercredi 20 juillet 2016 Statut Membre Dernière intervention 29 septembre 2016 - 20 juil. 2016 à 17:39
Bonjour à tous,

c'est mon premier post sur un forum, donc si je fais mal n'hésitez pas à me prévenir.

Je suis en train d'essayer de passer des nombres à point (2.2 / 150.25 par exemple) à des nombres avec virgules (2,2 / 150,25). Après avoir écumé la toile, number_format m'a semblé la meilleur solution, tout marche parfaitement quand je convertis les nombre, mais si je les additionne (chose qui m'est indispensable), le résultat est un nombre sans virgule ni point.

Voici mon code :
<html>
<head>
<meta charset="utf-8" />
</head>
<?php
function setMinutes($minutesNouv) {

if ( $minutesNouv == 00 || $minutesNouv == 15 || $minutesNouv == 30 || $minutesNouv == 45 ) {
$minutes = $minutesNouv;
} else {
$minutes = 0;

}
}
function getHeuresDecimales($heures, $minutes) {
$time = $heures + ($minutes / 60);
$time = number_format($time, 2, ",", "");
return $time;
}

function setHeuresDecimales($heuresD) {
$heures = floor(floatval($heuresD));
setMinutes((floatval($heuresD) - floor(floatval($heuresD))) * 60);
}

$heure = getHeuresDecimales(10, 30);
$heure1 = getHeuresDecimales(3, 30);
echo $heure . '<br>';
echo $heure1 . '<br>';
echo $heure + $heure1;

?>
<body>
<p>Convertir avec virgule</p>
</body>
</html>

et voici le résultat :

10,50
3,50
13
Convertir avec virgule

Je ne vois vraiment pas d'où cela peut venir, si quelqu'un peut m'aider.


A voir également:

1 réponse

pierre.lagoutte Messages postés 35 Date d'inscription mercredi 20 juillet 2016 Statut Membre Dernière intervention 29 septembre 2016 5
Modifié par pierre.lagoutte le 20/07/2016 à 17:44
Bonjour,

number_format revoie une chaîne de caractères (string), il est donc normal que vous ne puissiez pas les additionner.

Je peux vous proposer deux solutions : soit vous gardez la variable float d'origine été n'utilisez number_format que pour l'affichage final, soit vous utilisez cette petite fonction (je ne l'ai pas testée) :

function add($a, $b) // a et b sont des chaînes de caractères formatées avec number_format()
{
    $arrayA = explode(',', $a); // On sépare la chaîne en deux : la partie entière et décimale
    $arrayB = explode(',', $b); // On sépare la chaîne en deux : la partie entière et décimale
    
    $result = $arrayA[0] + $arrayB[0]; // On additionne les deux partie entières

    if($arrayA[1] + $arrayB[1] >= 100) // Si la partie décimale est supérieure à 100
    {
        $result += 1; // On ajoute 1 au résultat
        $result += ($arrayA[1] + $arrayB[1] - 100) / 100; // On ajoute la partie décimale après avoir soustrait 100
    }

    return $result; // On retourne le résultat
}


Je reste à votre entière disposition si le code ci-dessus ne fonctionne pas ou si vous ne le comprenez pas.

Cordialement
0