Retirer les décimales inutiles de number_format avec PHP

Publié le 04/04/2022 • Mis à jour le 04/04/2022


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous voyons comment retirer les décimales inutiles de number_format avec PHP. Cette astuce n'est utile que si vous utilisez des paramètres localisés pour les séparateurs de décimales et des milliers. Si vous n'avez pas besoin de cela, forcer en tant que chaîne la variable de type flottant fait le travail comme montré dans la deuxième boucle foreach.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
trait Snippet196Trait
{
    public function snippet196(): void
    {
        $floats = [
            10,
            10.00,
            10.01,
            10.10,
            10.99,
            10.01010,
            11111.001001000,
        ];

        var_dump($floats);
        echo PHP_EOL;

        foreach ($floats as $idx => $float) {
            echo 'n°'.$idx.': '.number_format($float, 2).' -> '.$this->numberFormatRemoveExtra($float).PHP_EOL;
        }

        echo PHP_EOL.'-- With string cast '.PHP_EOL;

        foreach ($floats as $idx => $float) {
            echo 'n°'.$idx.': '.$float.PHP_EOL; // cast is automatic (if possbile) when concatening two variables
        }

        // That's it! 😁
    }

    private function numberFormatRemoveExtra(float $number): string
    {
        $float = explode('.', (string) $number);
        $right = $float[1] ?? '';

        return number_format($number, \strlen($right), ',', '.');
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Snippet aléatoire