• Publicidad

Sumar cantidades con .

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Sumar cantidades con .

Notapor Felurian » 2012-08-26 10:47 @491

Hola, pongamos que tengo cantidades de euros almacenadas así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
3.456.850,00
223.456,00
1.225,00
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Quiero ir sumándolas, pero no sé de qué forma está sumando Perl.

Se me ocurre quitar los puntos y las comas para sumar y luego volverlos a añadir, pero ¿hay alguna otra forma de sumar esto?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. my @cantidades = qw(223.790,92 1.225,00 3.567.833,00);
  4.  
  5. map $pasta += $_, @cantidades;
  6. print "¿$pasta" . "?\n";
  7.  
  8. for(@cantidades){
  9.         print $prueba += $_;
  10.         print "\n";
  11. }
  12.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Felurian
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-08-26 10:27 @477

Publicidad

Re: Sumar cantidades con .

Notapor explorer » 2012-08-26 12:37 @567

Bienvenido a los foros de Perl en Español, Felurian.

Lo que ocurre es que Perl no sabe qué quieren decir las comas y los puntos, ya que esos son caracteres que dependen de la configuración regional de cada país.

Por defecto, Perl sigue la configuración regional básica del sistema POSIX, por lo que entenderá que algo es un número si tiene como separador decimal el '.' y no contiene agrupaciones de millares. Por ejemplo: 3456850.00 (más información en perlnumber).

Habría una solución que sería interpretar los números según la configuración regional en la que vienen, usando POSIX y las funciones setlocale() y strtod, pero quedaría larga, y además, no tendría en cuenta los casos de agrupación de millares, como se comenta en la sección "La función localeconv" de perllocale.

Casi mejor, por ser más claro y rápido, hacer lo que propones:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.10;
  3.  
  4. my @cantidades = qw(223.790,92 1.225,00 3.567.833,00);
  5. my $total;
  6.  
  7. for (@cantidades) {
  8.     tr/.//d;   # quitamos los separadores de millares
  9.     tr/,/./;   # convertimos el separador decimal a '.'
  10.     say;       # mostramos resultado de la conversión
  11.     $total += $_;
  12. }
  13.  
  14. say $total;    # 3792848,92
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

A propósito, en Español, los números se formatean siguiendo estas reglas:
  • el separador decimal puede ser, indistintamente, el punto o la coma
  • el separador de grupos de millares, es un "breve espacio en blanco", que en HTML podría ser la entidad   o, más sencillo, un simple espacio en blanco.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sumar cantidades con .

Notapor Felurian » 2012-08-26 17:23 @766

Hola, explorer, gracias por la explicación, ¡qué amplia!
Todo aclarado.

salu2!
Felurian
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2012-08-26 10:27 @477


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron