J'ai un prix "0,10" ou "00000,10"
maintenant lorsque j'essaie p> i get 0,00.
Comment puis-je réparer cela? Je veux 0,10 $.
Je ne veux pas d'arrondir. P> ou quand j'ai 5 678, je reçois 5,68. Mais je veux 5,67. p> p>
10 Réponses :
Vous pouvez augmenter la taille du nombre avant de terminer avec étage : Une autre solution, qui peut donner une meilleure précision car elle évite l'arithmétique à virgule flottante, est de le formater avec trois décimales et de jeter le dernier chiffre après le formatage: p> $formatted = substr(number_format($price, 3, ',', ''), 0, -1);
Remarque: la solution à base de cordes ne fonctionne pas pour les nombres tels que 1.9999 code>.
Number_Format () Code> Travaillera toujours et sortie
2,00 code> au lieu de
1,99 code>.
Vous devez convertir un numéro rempli de virgule vers une décimale normale avant avec Str_replace. $ Numéro = str_replace (",", ".", $ numéro); et puis vous pouvez utiliser Number_Format P>
Ouais! 0,10 code> est une chaîne, pas un flotteur (
0.10 code>).
Si vous voulez littéralement simplement vouloir effacer les zéros de premier plan et simplement limiter la longueur, plutôt que sur une certaine quantité de décimales, une solution plus généralisée pourrait être cette fonction:
$number = "005,678"; $answer = cutafter($number,",",2);
"00000,10" code> est une chaîne. Vous devriez un point décimal. Pour obtenir le comportement souhaité, vous pouvez utiliser:
echo substr(number_format(str_replace(',', '.', $price), 3, ',', ''), 0, -1);
juste avant number_format code> est exécuté la chaîne "0,10" est convertie par PHP en un numéro. Parce que PHP utilise toujours la notation d'Engish, il ne s'occupera pas de la virgule.
$price = str_replace(',', '.', '0,10');
number_format($price, 2, ',', '');
Plusieurs personnes ont mentionné l'arrondir à 3 puis laissant tomber le dernier caractère. Cela ne fonctionne réellement pas. Disons que vous avez 2,9999 et l'arrondir à 3 c'est 3 000.
Ceci n'est toujours pas précis, la meilleure solution est la suivante: p> Qu'est-ce que cela fait prend le prix et Multiplie de 100 (10 ^ décimale) qui donne 567,8, puis nous utilisons le sol pour l'obtenir à 567, puis nous le divisons de 100 pour obtenir 5,67 p> p>
Mon problème était que l'erreur de validateur HTML Messege Thar J'ai résolu ce message d'erreur en plaçant Floatval pour cet argument comme Number_Format () code> L'argument n'est pas double. P>
Number_Format (Floatval ($ var), 2, ". '",' ') p> Bien. P>
function format_numeric($value) { if (is_numeric($value)) { // is number if (strstr($value, ".")) { // is decimal $tmp = explode(".", $value); $int = empty($tmp[0]) ? '0' : $tmp[0]; $dec = $tmp[1]; $value = number_format($int, 0) . "." . $dec; return $value; } $value = number_format($value); return $value; } return $value; // is string } Unit Testing: Passed / 1100000 => 1,100,000 Passed / ".9987" => .9987 Passed / 1100.22 => 1,100.22 Passed / 0.9987 => 0.9987 Passed / .9987 => 0.9987 Passed / 11 => 11 Passed / 11.1 => 11.1 Passed / 11.1111 => 11.1111 Passed / "abc" => "abc"
Utilisez ceci (Extension de PHP IntL activée)
$numberFmtCurrency = new NumberFormatter('de_AT', NumberFormatter::CURRENCY); $numberFmtCurrency->setAttribute(NumberFormatter::ROUNDING_INCREMENT, 0); $numberFmtCurrency->formatCurrency(328.13, 'EUR'); // prints ⬠328.13 (and not 328.15)
Sir pouvez-vous fournir à la bibliothèque que vous utilisez?
Veuillez ajouter quelques explications à votre réponse, de sorte que d'autres puissent en apprendre d'elle