2012-05-14 12 views
6

Wie konvertiert Zeichenfolge konvertieren in Perl nummerierenWie String-Nummer (float) in Perl

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

Gibt es eine andere Art und Weise Standard 10.05 von '10 0,0500000' zu bekommen, anstatt mit einem der Multiplikation?

+0

Haben Sie sich http://stackoverflow.com/questions/2019178/how-can-i-convert-a-string-to-a-float-with-perl angesehen? –

+0

@Jessada. es ist nicht nützlich. Es wurde nicht darüber gesprochen, wie man konvertiert. – Bala

+0

@Hindol int() wird ganzzahligen Wert geben ... int (10.05000) = 10 – Bala

Antwort

13

ich die wörtliche Frage bin zu beantworten. Vielleicht möchten Sie format the number für die Anzeige.

Beide Ausdrücke

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

Rückkehr die Zeichenfolge 10.05.

6

Nun, könnten Sie 0 hinzufügen, um gut :-)

Sie sollten nicht zu viel über die interne Darstellung einer skalaren in Perl egal, es sei denn, Sie einige seltsame Dinge tun (und sagen Sie uns bitte, wenn Sie sind). Was wie eine Zahl aussieht, ist eine Zahl.

Oder müssen Sie überprüfen, ob die Zeichenfolge eine "echte" Zahl ist? Nun, eigentlich ist jede Saite. Es gibt einen schönen Artikel zu diesem Thema: http://www.perl.com/doc/FMTEYEWTK/is_numeric.html

8

In Perl sind Skalare nicht getippt. Stattdessen sind die Betreiber. Wenn Sie also $a . "1" tun, verwenden Sie $a als Zeichenfolge, und wenn Sie $a + 1 tun, verwenden Sie $a als eine Zahl. Perl wird sein Bestes tun, um herauszufinden, was ein Skalar für eine bestimmte Operation bedeutet. In den meisten Fällen wird das Konvertieren implizit für Sie durchgeführt.

Wenn Sie überprüfen müssen, ob Ihre Zeichenfolge tatsächlich konvertiert werden kann, verwenden Sie reguläre Ausdrücke.

Hier ist ein Diskurs darüber, wie das zu tun: http://www.regular-expressions.info/floatingpoint.html

+4

Eine Zahl mit Regex zu erkennen ist ein Perl FAQ: [Wie kann ich feststellen, ob ein Skalar eine Zahl/Ganzzahl/Integer/Float?] (http : //learn.perl.org/faq/perlfaq4.html#How-do-I-determine-whether-a-scalar-is-a-number-whole-intege-float-) – daxim

+0

@daxim: Ah, danke . Ich wusste, dass es eine bessere Quelle geben musste :) – Arkadiy

2

0+ ist ein bisschen mehr idiomatisch. Es wird normalerweise verwendet, um die Komponenten von Dualvars zu unterscheiden.

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

Es sieht seltsam aus, weil es nicht etwas ist, das Sie normalerweise tun müssen. Eine Zahl ist eine Zahl, unabhängig davon, ob sie intern als PV, IV, UV oder NV gespeichert ist. Es zu zwingen, dass es als NV (Float) gespeichert wird, sollte nicht notwendig sein, und es deutet normalerweise auf Buggy-Design an anderer Stelle hin.