2012-05-14 13 views
6

Come convertire stringa al numero in PerlCome convertire stringa in numero (float) in Perl

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

C'è un altro modo standard per ottenere 10,05 dal '10 0,0500' mila invece di moltiplicare con una sola?

+0

Hai dato un'occhiata a http://stackoverflow.com/questions/2019178/how-can-i-convert-a-string-to-a-float-with-perl? –

+0

@Jessada. non è utile Non ha parlato di come convertire. – Bala

+0

@Hindol int() fornirà un valore intero ... int (10.05000) = 10 – Bala

risposta

13

sto rispondendo alla domanda letterale. Forse vuoi il format the number per la visualizzazione.

Entrambe le espressioni

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

ritorno la stringa 10.05.

6

Beh, si potrebbe aggiungere 0 come pure :-)

Si consiglia di non preoccuparsi troppo della rappresentazione interna di uno scalare in perl, a meno che non si sta facendo alcune cose strane (e vi prego di dirci se si siamo). Qualunque cosa assomigli a un numero è un numero.

Oppure è necessario verificare se la stringa è un numero "reale"? Beh, in realtà, qualsiasi stringa è. C'è un bell'articolo su questo argomento: http://www.perl.com/doc/FMTEYEWTK/is_numeric.html

8

In Perl, gli scalari non sono stati digitati. Invece, gli operatori lo sono. Quindi, quando fai $a . "1" usi $a come stringa, e quando fai il numero $a + 1 usi il numero $a. Perl farà del suo meglio per capire cosa significa uno scalare per una determinata operazione. Quindi, per la maggior parte dei casi, la "conversione" viene fatta implicitamente per te.

Se è necessario verificare che la stringa possa essere effettivamente convertita, utilizzare le espressioni regolari.

Ecco un discorso su come farlo: http://www.regular-expressions.info/floatingpoint.html

+4

Rilevare un numero con regex è un FAQ Perl: [Come determinare se uno scalare è un numero/intero/intero/float?] (http : //learn.perl.org/faq/perlfaq4.html#How-do-I-determine-whether-a-scalar-is-a-number-whole-integer-float-) – daxim

+0

@daxim: Ah, grazie . Sapevo che doveva esserci una fonte migliore :) – Arkadiy

2

0+ è un po 'più idiomatico. Solitamente è usato per distinguere i componenti di dualvars.

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

Sembra strano perché non è qualcosa che normalmente devi fare. Un numero è un numero, che sia memorizzato internamente come PV, IV, UV o NV. Costringendolo a essere memorizzato come NV (float) non dovrebbe essere necessario, e di solito è indicativo di design buggy altrove.

Problemi correlati