Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Arrondir un nombre

5 views
Skip to first unread message

kurtz le pirate

unread,
Feb 25, 2023, 1:08:37 PM2/25/23
to
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

unread,
Feb 25, 2023, 4:52:13 PM2/25/23
to
kurtz le pirate <kurtzl...@free.fr> wrote:
> 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.

> 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

unread,
Feb 25, 2023, 4:52:36 PM2/25/23
to
kurtz le pirate <kurtzl...@free.fr> wrote:
> 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.

> Des idées ?

Ou des magouilles comme int(nombre * 100) / 100

Ou encore int($num + 0.99);

kurtz le pirate

unread,
Feb 26, 2023, 9:50:27 AM2/26/23
to
On 25/02/2023 22:52, Marc SCHAEFER wrote:
> kurtz le pirate <kurtzl...@free.fr> wrote:
>> 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.
>
>> 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
0 new messages