¿Cómo convertiría una cadena que contiene un número en su valor numérico en Perl?¿Cómo puedo convertir una cadena en un número en Perl?
Respuesta
No es necesario para convertirlo en absoluto:
% perl -e 'print "5.45" + 0.1;'
5.55
Perl en realidad sólo tiene tres tipos: escalares, arrays y hashes. E incluso esa distinción es discutible. ;) La forma en que se trata cada variable depende de lo que haga con ella:
% perl -e "print 5.4 . 3.4;"
5.43.4
% perl -e "print '5.4' + '3.4';"
8.8
Perl tiene muchos más tipos que, pero para valores únicos, es solo un valor único –
también puedes agregar 0 –
Perl es un lenguaje basado en el contexto. No hace su trabajo de acuerdo con los datos que le das. En cambio, se da cuenta de cómo tratar los datos en función de los operadores que utiliza y el contexto en el que los utiliza. Si lo hace números tipo de cosas, se obtiene números:
# numeric addition with strings:
my $sum = '5.45' + '0.01'; # 5.46
si lo hace cadenas tipo de cosas, se obtiene cuerdas:
# string replication with numbers:
my $string = (45/2) x 4; # "22.522.522.522.5"
Perl en su mayoría se da cuenta de qué hacer y sobre todo es correcto. Otra forma de decir lo mismo es que a Perl le importan más los verbos que los sustantivos.
¿Estás tratando de hacer algo y no está funcionando?
Perdona mi falta de conocimiento aquí, pero no entiendo muy bien tu segundo ejemplo. Estás dividiendo dos números, luego multiplicándolos, ¿cómo/por qué esto da como resultado una cadena? – gideon
No estoy multiplicando números. El 'x' es el operador de replicación de cadena. –
oh ya veo. ¡Gracias! :) Perl seguro tiene muchos operadores. – gideon
Google llévame aquí mientras buscas la misma pregunta que phill preguntó (ordenando flotadores), así que pensé que valdría la pena publicar la respuesta a pesar de que el hilo era viejo. Soy nuevo en Perl y sigo teniendo la cabeza agachada, pero la declaración de Brian Foy "a Perl le importan más los verbos que los sustantivos". arriba realmente da en el clavo en la cabeza. No es necesario convertir las cuerdas en flotadores antes de aplicar el género. Debe indicar a la ordenación que clasifique los valores como números y no como cadenas. es decir
my @foo = ('1.2', '3.4', '2.1', '4.6');
my @foo_sort = sort {$a <=> $b} @foo;
Ver http://perldoc.perl.org/functions/sort.html para más detalles sobre el tipo
Según entiendo int() no pretende ser una función 'fundido' para designar el tipo de datos es simplemente ser (ab) usa aquí para definir el contexto como una aritmética. He usado (ab) (0 + $ val) en el pasado para asegurarme de que $ val se trate como un número.
Esta es una solución simple:
Ejemplo 1
my $var1 = "123abc";
print $var1 + 0;
Resultado
123
Ejemplo 2
my $var2 = "abc123";
print $var2 + 0;
Resultado
0
AFAIU esta es la única respuesta a lo que se pidió – Cougar
@Cougar: estoy de acuerdo. –
Tenga cuidado al agregar cero a una cadena. Si la cadena comienza con "inf" o con "nan", el valor no será cero. P. ej. my $ var2 = "info123"; print $ var2 + 0: El resultado será: Inf –
En las comparaciones, hace una diferencia si un escalar es un número de una cadena. Y no siempre es decidible.Puedo informar de un caso en el Perl recuperó un flotador en la notación "científica" y utiliza ese mismo unas líneas más adelante en una comparación:
use strict;
....
next unless $line =~ /and your result is:\s*(.*)/;
my $val = $1;
if ($val < 0.001) {
print "this is small\n";
}
Y aquí $val
no se interpretó como por ejemplo numérico "2e-77"
recuperado de $line
. Agregar 0 (o 0.0 para los buenos programadores de ole C) ayudó.
$var += 0
Probablemente lo que quiere. Se advierte sin embargo, si $ var es la cadena no se puede convertir a numérico, obtendrá el error, y $ var se restablecerá a 0:
my $var = 'abc123';
print "var = $var\n";
$var += 0;
print "var = $var\n";
registros
var = abc123
Argument "abc123" isn't numeric in addition (+) at test.pl line 7.
var = 0
Perl está débilmente tipado y basado en el contexto. Muchos escalares pueden tratarse como cadenas y números, dependiendo de los operadores que use. $a = 7*6; $b = 7x6; print "$a $b\n";
Obtiene 42 777777
.
Hay una diferencia sutil, sin embargo. Cuando lea datos numéricos de un archivo de texto en una estructura de datos y luego los vea con Data::Dumper
, notará que sus números están entre comillas. Perl los trata internamente como cadenas.
Leído: $my_hash{$1} = $2 if /(.+)=(.+)\n/;
.
Dump: 'foo' => '42'
Si desea que los números no cotizados en un vertedero:
Leer: $my_hash{$1} = $2+0 if /(.+)=(.+)\n/;
.
Dump: 'foo' => 42
Después $2+0
Perl se da cuenta de que ha tratado $ 2 como un número, ya que utiliza un operador numérico.
Me di cuenta de esto al intentar comparar dos valores hash con Data::Dumper
.
- 1. ¿Cómo convierto una cadena binaria en un número en Perl?
- 2. ¿Cómo puedo convertir un número en texto en Perl?
- 3. Cómo convertir cadena a número (flotante) en Perl
- 4. ¿Cómo extraer un número de una cadena en Perl?
- 5. En Perl, ¿cómo puedo saber si una cadena es un número?
- 6. ¿Cómo puedo encapsular una cadena en Perl?
- 7. ¿Cómo puedo preasignar una cadena en Perl?
- 8. En Powershell, ¿cómo puedo convertir una cadena con un "signo" final en un número?
- 9. Bash: ¿Cómo convertir un número en una cadena de mes?
- 10. perl cómo convertir una cadena a Datetime?
- 11. Cómo convertir cadena en número en gnuplot
- 12. ¿Cómo puedo convertir una cadena con punto y coma en un número flotante en Python?
- 13. ¿Cómo puedo convertir una cadena en un flotante en mysql?
- 14. ¿Cómo puedo interpolar un elemento hash Perl en una cadena?
- 15. Javascript para convertir una cadena en un número?
- 16. ¿Cómo puedo convertir zonas horarias en Perl?
- 17. convertir un número entero en una cadena como 3
- 18. ¿Cómo puedo calcular el número de caracteres necesarios para convertir una cadena en un palíndromo?
- 19. ¿Cómo convertir una representación de cadena de un número a un número en coldfusion?
- 20. ¿Cómo puedo convertir Perl en C?
- 21. Convertir un número entero en una cadena sin asignar memoria
- 22. Cómo convertir una cadena codificada en hexadecimal a una cadena de bytes en Perl?
- 23. ¿Cómo puedo convertir una cadena en un objeto de ubicación?
- 24. ¿Cómo puedo convertir una cadena en entero con ceceo común?
- 25. ¿Cómo puedo convertir un número entero en float en Java?
- 26. ¿Cómo puedo convertir un número a su forma múltiple en Perl?
- 27. ¿Cómo puedo convertir una cadena en una lista en Python?
- 28. Cómo convertir un número MAC a una cadena MAC?
- 29. Perl: ¿Convertir cadena a referencia?
- 30. convertir un número entero en una matriz
Algunas de las respuestas son confusas porque la pregunta ha sido editada. La respuesta por porquero es mejor para esta versión de la pregunta. – TimK
La pregunta necesita más detalles. ¿La cuerda solo está compuesta de números? ¿Alfanumérico? Ok, si alphas son despojados? ¿Hay un propósito específico para el número resultante? – JGurtz