2012-05-14 19 views
6

Cómo convertir cadena a numerar en PerlCómo convertir cadena a número (flotante) en Perl

$str = '10.0500000'; 
$number = $str * 1; # 10.05 

¿Hay alguna otra manera estándar para obtener 10,05 0,0500000' del '10 en lugar de multiplicar con uno?

+0

¿Usted echó un vistazo a http://stackoverflow.com/questions/2019178/how-can-i-convert-a-string-to-a-float-with-perl? –

+0

@Jessada. no es útil. No habló sobre cómo convertir. – Bala

+0

@Hindol int() dará valor entero ... int (10.05000) = 10 – Bala

Respuesta

13

estoy respondiendo a la pregunta literal. Quizás desee format the number para visualizar.

Ambas expresiones

sprintf '%.2f', '10.0500000' 
sprintf '%.2f', 10.0500000 

devolver la cadena de 10.05.

6

Bueno, se podría añadir 0, así :-)

Usted no debe preocuparse demasiado acerca de la representación interna de un escalar en Perl, a menos que usted está haciendo algunas cosas extrañas (y por favor díganos si usted son). Lo que parece un número es un número.

¿O necesita comprobar si la cadena es un número "real"? Bueno, en realidad, cualquier cuerda es. Hay un buen artículo sobre este tema: http://www.perl.com/doc/FMTEYEWTK/is_numeric.html

8

En Perl, los escalares no se escriben. En cambio, los operadores son. Entonces cuando haces $a . "1" usas $a como una cadena, y cuando lo haces $a + 1 usas $a como un número. Perl hará todo lo posible para descubrir qué significa un escalar para una operación determinada. Entonces, para la mayoría de los casos, "convertir" se realiza implícitamente para usted.

Si necesita verificar que su cadena de hecho se puede convertir, use expresiones regulares.

Aquí es un discurso sobre cómo hacerlo: http://www.regular-expressions.info/floatingpoint.html

+4

La detección de un número con expresiones regulares es una pregunta frecuente de Perl: [¿Cómo puedo determinar si un escalar es un número/entero/entero/flotante?] (http : //learn.perl.org/faq/perlfaq4.html#How-do-I-determine-whether-a-scalar-is-a-number-whole-integer-float-) – daxim

+0

@daxim: Ah, gracias . Sabía que tenía que haber una mejor fuente :) – Arkadiy

2

0+ es un poco más idiomático. Usualmente se usa para distinguir los componentes de los dualvars.

$ perl -E' 
    system({ "nonexistant" } "nonexistant"); 
    say 0+$!, ": ", $!; 
' 
2: No such file or directory 

Parece extraño porque no es algo que normalmente tengas que hacer. Un número es un número, ya sea que esté almacenado internamente como PV, IV, UV o NV. Obligar a que se almacene como un NV (flotante) no debería ser necesario, y por lo general es indicativo de un diseño defectuoso en otros lugares.

Cuestiones relacionadas