J'ai besoin de vérifier en PHP si l'utilisateur a saisi un nombre décimal (comme aux États-Unis, avec le point décimal : X.XXX).
Y a-t-il un moyen fiable de le faire ?
J'ai besoin de vérifier en PHP si l'utilisateur a saisi un nombre décimal (comme aux États-Unis, avec le point décimal : X.XXX).
Y a-t-il un moyen fiable de le faire ?
Vous pouvez obtenir la plupart de ce que vous voulez de is_float mais si vous vraiment ont besoin de savoir s'ils contiennent une décimale, votre fonction ci-dessus n'est pas très loin (bien que dans le mauvais langage) :
function is_decimal( $val )
{
return is_numeric( $val ) && floor( $val ) != $val;
}
@Felix Huh... Je suppose que non. En Python et ECMAScript, c'est la meilleure façon de gérer cela. Je l'ai échangé contre quelque chose de plus universel.
Je ne l'ai juste pas vu avant, mais il est toujours retourné 0
pour moi (en PHP). +1 pour la mise à jour :)
Si vous voulez que "10.00" renvoie vrai, vérifiez la réponse du Hibou de la nuit.
Si vous voulez savoir si les décimales ont une valeur, vous pouvez utiliser cette réponse.
Fonctionne avec tous les types (int, float, string)
if(fmod($val, 1) !== 0.00){
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
(fmod(1.00, 1) !== 0.00) // returns false
(fmod(2, 1) !== 0.00) // returns false
(fmod(3.01, 1) !== 0.00) // returns true
(fmod(4.33333, 1) !== 0.00) // returns true
(fmod(5.00000, 1) !== 0.00) // returns false
(fmod('6.50', 1) !== 0.00) // returns true
fmod
renvoie le reste en virgule flottante (modulo) de la division des arguments, (d'où le (!== 0.00))
Opérateur de module - pourquoi ne pas utiliser l'opérateur modulus ? Par exemple ($val % 1 != 0)
Desde el Documents PHP :
Les opérandes du module sont convertis en nombres entiers (en supprimant la partie décimale) avant d'être traités.
Ce qui détruira effectivement le but de l'opération, dans d'autres langages comme le javascript, vous pouvez utiliser l'opérateur modulus
Si tout ce dont vous avez besoin est de savoir si un point décimal existe dans une variable, alors ceci fera l'affaire...
function containsDecimal( $value ) {
if ( strpos( $value, "." ) !== false ) {
return true;
}
return false;
}
Cette solution n'est pas très élégante mais elle fonctionne avec les chaînes de caractères et les flottants.
Veillez à utiliser !== et non != dans le test strpos ou vous obtiendrez des résultats incorrects.
La fonction que vous avez postée n'est tout simplement pas PHP.
Jetez un coup d'œil à is_float
[docs] .
Editar: J'ai manqué la partie "valeur saisie par l'utilisateur". Dans ce cas, vous pouvez effectivement utiliser une expression régulière :
^\d+\.\d+$
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.
3 votes
Ce n'est pas une définition de fonction PHP.
0 votes
C'est du Actionscript, pas du PHP.
0 votes
Merci de l'avoir remarqué, la question a été modifiée. Désolé les gars, les nuits blanches m'ont fait trouver une fonction AS.
0 votes
Qu'est-ce qu'un nombre décimal à vos yeux ? Veuillez ajouter trois exemples à votre question. Puis, veuillez ajouter trois exemples de nombres non décimaux que vous attendez d'un utilisateur et que vous devez filtrer.
0 votes
Envisagez de regarder comment Zend a validé un float :
Zend_Validate_Float
0 votes
Gardez à l'esprit que lorsque vous utilisez, par exemple,
<input type="number" min="0.00" max="100.00" step="0.01"... />
En revanche, certains navigateurs utiliseront "1" comme valeur incrémentielle suivante après "0,99". Pour cette raison, il peut être utile de considérer la réponse de rybo111 : stackoverflow.com/a/20098294/1617737