Page 1 sur 1

Exercice : est ce que ce nombre est rond ?

Posté : 04 mars 2024, 16:23
par two3d
Petit exercice (sauf s'il existe une fonction PHP qui sache retourner true si un nombre est rond, comme 10, 200 ou encore 1250).

Comment feriez-vous ?

Re: Exercice : est ce que ce nombre est rond ?

Posté : 05 mars 2024, 01:17
par Spols
$nombre % 10 == 0 ??

Utiliser fmod si on a un float en entrée mais ce sera toujours false :mrgreen:

Re: Exercice : est ce que ce nombre est rond ?

Posté : 05 mars 2024, 01:46
par two3d
Je connais pas bien le modulo mais ça doit fonctionner si tu le propose.

Pour l'exercice, on envoi toujours un un entier.

J'aurais fait :
if(substr( (string) $nombre, -1, 1) == '0')
:lol:

Re: Exercice : est ce que ce nombre est rond ?

Posté : 05 mars 2024, 08:04
par or 1
est-ce que 3000000000000000000000010 est un nombre rond ?

Re: Exercice : est ce que ce nombre est rond ?

Posté : 05 mars 2024, 08:18
par two3d
Je pense que oui (la définition du nombre rond est à vérifier...)

Sinon :
if(preg_match("#^[1-9]0+$#", (string) $nombre))

Re: Exercice : est ce que ce nombre est rond ?

Posté : 05 mars 2024, 09:15
par or 1
3569566657136958466956810 l'est aussi ?

Re: Exercice : est ce que ce nombre est rond ?

Posté : 05 mars 2024, 09:43
par two3d
Je ne trouve pas de définition du nombre rond... Je pense que oui, dès lors qu'il y ait un 0 ou qu'il soit de 1 à 9.

Re: Exercice : est ce que ce nombre est rond ?

Posté : 05 mars 2024, 11:18
par @rthur
Pour moi, la définition d'un nombre "rond", c'est que c'est un nombre entier (= pas de virgule).
Et PHP a une fonction pour ça qui est is_int : https://www.php.net/is_int

Attention aux limitations inhérentes aux grands nombres, au-delà de 9223372036854775807 is_int() va renvoyer false (nombre entier maximum sur un serveur 64 bits).
S'il est possible que tu dépasses cette limite, alors effectivement, j'utiliserai la regex ^[0-9]+$

(@two3d dans ta regex tu as oublié d'autoriser le zéro ailleurs qu'en dernière position, par exemple 100 ne va pas fonctionner)

Re: Exercice : est ce que ce nombre est rond ?

Posté : 05 mars 2024, 11:43
par two3d
OK, je pense aussi maintenant qu'un nombre rond est sans virgule, la regex ^[0-9]+$ sera l'idéal.

Super, vous avez pété mon exercice :mrgreen:

Non, c'est très bien, ça permet de savoir ce qu'est finalement un nombre/chiffre rond. J'avais pour besoin de vérifier si un ID était un chiffre à centaines (plutôt que rond, comme je l'ai précisé), je pense m'être mal exprimé.

Prenons exemple du nombre 1800, serait true pour mon exercice.

Il suffirait alors de faire :
if(substr( (string) $nombre, -2, 2) == '00')
ou :
if(preg_match("#^[1-9](?:[0-9]+)?00$#", (string) $nombre))
Ou avec modulo ? Mais ne connais pas bien son fonctionnement.

Re: Exercice : est ce que ce nombre est rond ?

Posté : 05 mars 2024, 15:05
par Spols
J'ai pensé en premier a le traiter comme string et verifier qu'il fini par 0 mais si un chiffre a virgule ou avec séparateur de millier est introduit et nest pas prevu ==> bug

Pour moi un chiffre rond est divisible par 10 donc fini par 10.

Pour tes chiffres centaines
$nombre % 100 == 0
Ou
fmod($nombre, 100) == 0

Re: Exercice : est ce que ce nombre est rond ?

Posté : 05 mars 2024, 17:12
par or 1
"Nombre qui ne serait pas affecté par un arrondissement. La notion est vague : les nombres pairs sont perçus comme plus ronds que les impairs ; pour les grands nombres, sont ronds ceux qui ont peu de chiffres significatifs."

pour moi, 3569566657136958466956810 et 3000000000000000000000010 ne le sont pas.
3 * 10 ^ 28 est un nombre rond, 3.0000000000000000000000000001 * 10 ^ 28 ne l'est pas.