2012-11-13 2 views
0

Fondamentalement, je suis en train de sortir un tas de chiffres dans une colonne bien aligné en forme pour ressembler à ceci:PHP money_format nombre rembourré regroupant

$##,###.## 
$##,###.## 

Avec le code suivant

setlocale(LC_MONETARY, 'en_US.utf8'); 
money_format('%=0(#5.2n',$sum) 

il fonctionne SAUF quand $ somme est inférieure à 1000. par exemple, avec

$sum=1550.00; 

(comme prévu) le code ci-dessus OU tputs

$01,550.00 

Cependant, avec

$sum=167.00; 

les sorties extrait ci-dessus

$000167.00 

qui, évidemment, n'est pas ce que je dois. Selon le documentation

Les séparateurs de groupe ne seront pas appliqués pour remplir les caractères, même si le caractère de remplissage est un chiffre.

Donc, c'est le comportement attendu de la fonction. Cela ne semble pas logique, mais c'est comme ça que ça fonctionne.

Des suggestions sur la façon d'obtenir un formatage correct pour les numéros rembourrés seraient appréciées.

Merci!

+0

La fonction prend tout son sens si vous tenez compte du fait que le caractère de remplissage habituel est un espace. Je ne recommanderais pas d'utiliser des zéros, je recommanderais également de ne pas utiliser de virgules ou de points comme séparateurs de groupes - ils se trompent facilement dans l'autre moitié du monde en tant que séparateur décimal. Un point ou une virgule par nombre - chaque humain considérera cela comme le séparateur décimal. – Sven

+0

Merci pour le conseil, Sven. Cependant, ce format est une exigence de l'entreprise, je n'ai aucun mot à dire sur la façon dont il faut regarder lors de la sortie. C'est une partie interne de l'application qui ne sera pas exposée à ceux qui peuvent confondre les virgules pour les points et vice versa. De plus, je vois ce que vous dites à propos de la fonction qui a du sens quand on l'approche de cette façon. Néanmoins, j'ai toujours besoin d'un comportement d'apparence plus cohérent, d'où ce post. –

Répondre

0

Vous pouvez créer votre propre fonction de formatage. localeconv() vous donnera des données comme des séparateurs et où le symbole de devise devrait s'asseoir. C'est celui que j'ai utilisé, qui correspond à mes besoins:

function my_number_format($amount) { 
    // Get separators 
    $l = localeconv(); 

    $str = number_format($amount, 2, $l['decimal_point'], $l['thousands_sep']); 

    // manual padding 
    while (strlen(preg_replace('/[^0-9]/', '', $str)) < 10) { 
     $init = preg_replace('/[^0-9].*/', '', $str); // initial all-digit sequence 
     $str = '0' . (strlen($init) == 3 ? $l['thousands_sep'] : '') . $str; 
    } 

    return $amount; 
} 
Questions connexes