Discussion:
Arrondir un nombre
(trop ancien pour répondre)
kurtz le pirate
2023-02-25 18:08:32 UTC
Permalink
Hello,

C'est un peu vide ici.
Longtemps que je n'ai pas vu de message :(


Bon, ma question : je veux arrondir un nombre.
Pas dans l'affichage, mais vraiement un arrondi.

Après plusieurs recherches, la solution semble être l'utilisation de
sprintf ou installer le module Math::Round.

$rounded = sprintf("%.2f"", $unrounded);
Comme j'ai de gros fichiers à traiter (100/120Mo de nombres), je ne me
demande si sprintf est suffisament rapide.

Après, je ne vois pas trop comment faire.
Des idées ?


Merci
--
kurtz le pirate
compagnie de la banquise
Marc SCHAEFER
2023-02-25 21:52:11 UTC
Permalink
Post by kurtz le pirate
Comme j'ai de gros fichiers à traiter (100/120Mo de nombres), je ne me
demande si sprintf est suffisament rapide.
Probablement, sinon il y a aussi le module POSIX avec les fonctions du C
ceil, floor, etc.
Post by kurtz le pirate
Des idées ?
Ou des magouilles comme int(nombre * 100) / 100
--
Attention: limitez le nombre de lignes de citation à l'essentiel, sinon
je ne verrai pas votre réponse. Et si vous écrivez souvent des bobards,
je ne vous lirai plus et je recommanderai (NoCeM) de ne plus vous lire.
Marc SCHAEFER
2023-02-25 21:52:35 UTC
Permalink
Post by kurtz le pirate
Comme j'ai de gros fichiers à traiter (100/120Mo de nombres), je ne me
demande si sprintf est suffisament rapide.
Probablement, sinon il y a aussi le module POSIX avec les fonctions du C
ceil, floor, etc.
Post by kurtz le pirate
Des idées ?
Ou des magouilles comme int(nombre * 100) / 100

Ou encore int($num + 0.99);
--
Attention: limitez le nombre de lignes de citation à l'essentiel, sinon
je ne verrai pas votre réponse. Et si vous écrivez souvent des bobards,
je ne vous lirai plus et je recommanderai (NoCeM) de ne plus vous lire.
kurtz le pirate
2023-02-26 14:50:17 UTC
Permalink
Post by Marc SCHAEFER
Post by kurtz le pirate
Comme j'ai de gros fichiers à traiter (100/120Mo de nombres), je ne me
demande si sprintf est suffisament rapide.
Probablement, sinon il y a aussi le module POSIX avec les fonctions du C
ceil, floor, etc.
Post by kurtz le pirate
Des idées ?
Ou des magouilles comme int(nombre * 100) / 100
Ou encore int($num + 0.99);
En fait oui, j'ai fait quelques tests et sprintf est bien suffisant.
Comparaison des temps avec le nearest de Math::Round;

100 numbers
sprintf -> 0.000081
nearest -> 0.000092
1000 numbers
sprintf -> 0.000489
nearest -> 0.000859
10000 numbers
sprintf -> 0.004879
nearest -> 0.008612
100000 numbers
sprintf -> 0.050027
nearest -> 0.086946
1000000 numbers
sprintf -> 0.490112
nearest -> 0.865844
10000000 numbers
sprintf -> 4.948705
nearest -> 8.717012
--
kurtz le pirate
compagnie de la banquise
Continuer la lecture sur narkive:
Loading...