Salut,
J'ai (encore) un nombre, par exemple 192.
Mon but c'est de l'arrodir à 200 pour créer une échelle grossière.
La méthode que j'ai trouvée est basique de chez basique, de sorte que 1001 renvoit 2000, 120 revoit 200, 0,8 renvoit 1.
La méthode c'est de diviser par 10 tant que le nombre est supérieur à 10, puis arrondir au supérieur, etc.
Voila ce que j'ai fait:
Au fur et à mesure des essais, j'ai rencontré des erreurs (si on fournit "15,7", 15.7, 15 - d'où tous les ereg() -, ou encore 0.9...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 function scalenumber($n) { if ($n == 0) return 0; // Ajout de la décimale si elle n'existe pas if (!preg_match("/([0-9]+)[.,]([0-9])/", $n)) { $n = $n.",0"; } // Regarde la partie décimale et entière list($int, $decimal) = split('[.,]', $n); $n = ceil(($int.$decimal) / 10); while($n >= 10) { // Tant que le nombre est supérieur à 10 // On divise par 10, et on arrondie au supérieur $n = $n / 10; $n = ceil($n); } // Cas particulier: on passe de 9** à 10** (sinon 9 retournerait 1) $n = ($int[0] == 9) ? $n * 10 : $n; if ($int != 0) { // On regarde combien de dizaines possède $n: // on multiplie par celui-ci le chiffre arrondi retourné // Si $n = 1100, $nretourne = 2 et $nfinal = 2000 for ($i = 1; $i < strlen($int); $i++) { $n = $n * 10; } } else { // Cas particulier, 0 < $n < 1 ereg("^(0+)([0-9]+)$", $int.$decimal, $reg); $n = ($reg[2][0] == 9) ? $n * 10: $n; // Cas particulier: on passe de 9** à 10** (sinon 0.9 retournerait 0.1) $x = "1".$reg[1]; $n = $n / $x; } return $n; }
J'aimerais donc savoir si quelqu'un aurait quelque chose de mieux à me proposer, pourquoi pas en corrigeant ma fonction.
C'est la dernière version (en gros je n'ai pas rencontré d'erreur entre temps).
La prochaine version c'est d'arrondir 1100 en 1500, mais bon, c'est pas indispensable.
Merci
Partager