2012-05-14 53 views
6

如何轉換字符串在Perl字符串如何轉換爲數字(浮動)在Perl

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

到數爲那裏得到'10 0.0500000' 10.05,而不是一個乘以任何其他標準的方式?

+0

你有看看http://stackoverflow.com/questions/2019178/how-can-i-convert-a-string-to-a-float-with-perl? –

+0

@Jessada。這沒有用。它沒有談論如何轉換。 – Bala

+0

@Hindol int()將給出整數值... int(10.05000)= 10 – Bala

回答

13

我回答這個問題的文字。也許你想format the number顯示。

兩個表達式

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

返回字符串10.05

6

嗯,你可以加0以及:-)

你不應該太在意在Perl標量的內部表示,除非你正在做一些奇怪的事情(如果你請告訴我們是)。無論看起來像一個數字是一個數字。

或者您是否需要檢查字符串是否是「真實」號碼?實際上,任何字符串都是。關於此主題有一篇很好的文章:http://www.perl.com/doc/FMTEYEWTK/is_numeric.html

8

在Perl中,標量不是鍵入的。相反,運營商是。所以當你做$a . "1"你使用$a作爲一個字符串,當你做$a + 1時,你使用$a作爲一個數字。 Perl會盡力找出給定操作的標量意味着什麼。所以在大多數情況下,「轉換」是爲你隱式完成的。

如果您需要驗證您的字符串確實可以轉換,請使用正則表達式。

下面是關於如何做一個話語:http://www.regular-expressions.info/floatingpoint.html

+4

用正則表達式檢測數字是Perl常見問題解答:[如何確定標量是數字/整數/整數/浮點數?](http ://learn.perl.org/faq/perlfaq4.html#How-do-I-determine-whether-a-scalar-is-a-number-whole-integer-float-) – daxim

+0

@daxim:啊,謝謝你。我知道必須有更好的來源:) – Arkadiy

2

0+比較習慣。它通常用於區分dualvars的組件。

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

它看起來很奇怪,因爲它不是你通常必須做的事情。一個數字是一個數字,不管它是作爲PV,IV,UV還是NV內部存儲的。強制它作爲一個NV(浮動)存儲不應該是必要的,並且它通常指示其他地方的錯誤設計。