Étant donné, disons, 1,25 - comment puis-je obtenir les parties "1" et . "25" de ce nombre ?
Je dois vérifier si la partie décimale est de 0,0, 0,25, 0,5 ou 0,75.
Étant donné, disons, 1,25 - comment puis-je obtenir les parties "1" et . "25" de ce nombre ?
Je dois vérifier si la partie décimale est de 0,0, 0,25, 0,5 ou 0,75.
$n = 1.25;
$whole = floor($n); // 1
$fraction = $n - $whole; // .25
Puis comparez avec 1/4, 1/2, 3/4, etc.
En cas de nombres négatifs, utilisez ceci :
function NumberBreakdown($number, $returnUnsigned = false)
{
$negative = 1;
if ($number < 0)
{
$negative = -1;
$number *= -1;
}
if ($returnUnsigned){
return array(
floor($number),
($number - floor($number))
);
}
return array(
floor($number) * $negative,
($number - floor($number)) * $negative
);
}
En $returnUnsigned
l'empêche de faire -1.25 à -1 & -0.25
Sur le côté, intval()
ou un simple moulage comme (int)
pourrait être plus performant que floor()
@LanceH : Il ne le fait pas, mais vous pouvez le faire gérer assez facilement avec un drapeau négatif.
Cela casse et lance un avertissement à propos d'un index indéfini, si le nombre est un entier ou ne contient pas de partie décimale.
Cela suppose que le nombre ne sera pas représenté en notation scientifique lorsqu'il sera converti en chaîne. S'il s'agit d'un nombre vraiment très grand ou vraiment très petit, ce ne sera pas le cas et cette méthode ne fonctionnera pas.
Juste pour être différent :)
list($whole, $decimal) = sscanf(1.5, '%d.%d');
CodePad .
En outre, il ne se divisera que si les deux côtés sont composés de chiffres.
Cela suppose que le nombre ne sera pas représenté en notation scientifique lorsqu'il sera converti en chaîne. S'il s'agit d'un nombre vraiment très grand ou vraiment très petit, ce ne sera pas le cas et cette méthode ne fonctionnera pas.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Est-ce qu'une simple explosion fonctionnera ? $splitDec = explode(".", $decimal) ; $splitDec[0] sera maintenant par le 1 et splitDec[1] sera maintenant 25 de votre exemple.
0 votes
@Matt
split()
a été déprécié.0 votes
@alex oui, j'ai oublié. Je pensais à javascript. J'ai changé pour exploser.
0 votes
@Matt, split a été déprécié depuis PHP 5.3 et prend une regex comme argument, alors qu'explode prend une chaîne de caractères. explode() est préférable dans ce cas.
4 votes
Sachez que
explode(".",1.10);
donnera 1 et 1, pas 1 et 10