比方說,我有一個Perl的變量:在Perl中獲取float的精度?
my $string = "40.23";
my $convert_to_num = $string * 1;
有沒有一種方法,我可以找到這個浮點值的精確度?我的解決方案到目前爲止只是簡單地遍歷字符串,找到'。'的第一個實例,並開始計算多少位小數,在這種情況下返回2。我只是想知道這種事情是否有更優雅或內置的功能。謝謝!
比方說,我有一個Perl的變量:在Perl中獲取float的精度?
my $string = "40.23";
my $convert_to_num = $string * 1;
有沒有一種方法,我可以找到這個浮點值的精確度?我的解決方案到目前爲止只是簡單地遍歷字符串,找到'。'的第一個實例,並開始計算多少位小數,在這種情況下返回2。我只是想知道這種事情是否有更優雅或內置的功能。謝謝!
這裏是 「期之後的事情號」 的答案在$ nstring
length(($nstring =~ /\.(.*)/)[0]);
匹配的部分首先發現。 (\。),然後匹配其他所有內容(。*)。由於。*在括號中,因此返回爲第一個數組元素([0])。然後我用length()函數來計算多少。
感謝您的幫助,這正是我一直在尋找的! – lordmarinara 2012-07-05 22:30:15
您在Perl中使用普通變量所做的任何操作都將取決於您使用的編譯器和硬件。如果您真的在意精度,請使用
use "Math::BigFloat";
並設置所需的屬性。在Math :: BigFloat中,數字的數量更準確地稱爲精度。
use Math::BigFloat;
Math::BigFloat->accuracy(12);
$n = new Math::BigFloat "52.12";
print "Accuracy of $n is ", $n->accuracy(), " length ",scalar($n->length()),"\n";
將返回
Accuracy of 52.1200000000 is 12 length 4
問題是我無法設置它。我從Excel電子表格中的單元格中讀取數據,只想讀取電子表格中的內容,而不是設置自己的全侷限制。 – lordmarinara 2012-07-05 18:39:10
是什麼讓你無法讀取你的電子表格值並將它們內部存儲爲大浮點數?我認爲這取決於程序員如何處理他從外部收到的數據。 – DavidO 2012-07-05 18:44:01
對,我同意,我正在那樣做。但我還需要存儲的字段之一是有多少個小數位。 – lordmarinara 2012-07-05 18:53:44
沿着這條道路就是瘋狂。除少數特殊情況外,爲數字的浮點表示賦予小數精度是徒勞的。執行此代碼並重新考慮您的問題:'perl -e'printf「%。* f \ n」,$ _,「40.23」for 14,15,41'' – mob 2012-07-05 18:28:21
我無法無誤地運行該代碼? – lordmarinara 2012-07-05 18:43:49
當我讀到這個問題時,問題不是從存儲爲float或BigFloat的值計算小數位數,而是計算輸入數字中小數點後面出現的數字數。也就是說,一個字符串已被讀取,問題是字符串處理問題,而不是數值計算。那是對的嗎? – 2012-07-05 18:58:55