Voir, je veux écrire une fonction qui prend un paramètre de numéro de flotteur et arrondit le flotteur à la valeur de monnaie la plus proche (un flotteur avec deux décimales), mais si le paramètre flotteur a une fraction nulle (c'est-à-dire tous les zéros derrière la décimale), alors il retourne le flotteur comme un entier (ou c'est-à-dire tronquer la partie décimale puisqu'ils sont tous des zéros de toute façon.). P>
Cependant, je constate que je ne peux pas comprendre comment déterminer si si une fraction a une fraction nulle. Je ne sais pas s'il y a une fonction PHP qui le fait déjà. J'ai regardé. Le mieux que je puisse penser est de convertir le numéro de flotteur en un entier en la coulant d'abord, puis de soustraire la partie entière du flotteur, puis vérifiez si la différence est égale à zéro ou non. P>
6 Réponses :
if($value == round($value))
{
//no decimal, go ahead and truncate.
}
This example compares the value to itself, rounded to 0 decimal places. If the value rounded is the same as the value, you've got no decimal fraction. Plain and simple.
C'est la vieille école, l'a appris sur Commodore Basic. Devinez qui est ancien? :)
Un petit truc avec les capacités de jonglage de type PHPS
if ($a == (int) $a) {
// $a has a zero fraction value
}
Je préfère celui-ci sur le rond () code>. :)
Eh bien, le problème est que les flotteurs ne sont pas exacts. lire ici si vous souhaitez découvrir pourquoi. Ce que je ferais, c'est décider d'un niveau de précision, par exemple 3 décimales et exactitude de base à ce sujet. Pour ce faire, vous le multipliez par 1000, jetez-le à un int, puis vérifiez si $ your_number% 1000 == 0.
$mynumber = round($mynumber *1000);
if ($mynumber % 1000==0)
{ isInt() }
function whatyouneed($number) {
$decimals = 2;
printf("%.".($number == (int)($number) ? '0' : $decimals)."F", $number);
}
So basically it's either printf("%.2F") if you want 2 decimals and printf("%.2F") if you want none.
Juste pour que vous sachiez, vous ne devez pas avoir à écrire une fonction em> pour le faire, il existe déjà un qui existe: si vous voulez garder Le trailing .00 code>, omettez simplement le moule flottant (bien qu'il renvoie une chaîne): P> $roundedFloatStr = number_format("1234.000", 2, ".", ""); // 1234.00
Je pense que la meilleure façon: exemple: p>
Merci beaucoup pour vos réponses. Je l'apprécie et j'aimerais pouvoir donner plus d'une réponse la mieux / acceptée, mais hélas, il défait le but de la Superlative.