6
votes

Quelle serait la meilleure façon de détecter si un flotteur a une valeur de fraction zéro (par exemple 125.00) dans PHP?

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.).

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.


1 commentaires

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.


6 Réponses :


15
votes
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.

1 commentaires

C'est la vieille école, l'a appris sur Commodore Basic. Devinez qui est ancien? :)



10
votes

Un petit truc avec les capacités de jonglage de type PHPS

if ($a == (int) $a) {
    // $a has a zero fraction value
}


1 commentaires

Je préfère celui-ci sur le rond () . :)



0
votes

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() }


0 commentaires

1
votes
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.

0 commentaires

0
votes

Juste pour que vous sachiez, vous ne devez pas avoir à écrire une fonction em> pour le faire, il existe déjà un qui existe: xxx pré>

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


0 commentaires

2
votes

Je pense que la meilleure façon: xxx

exemple: xxx


0 commentaires