2017-02-13 37 views
2

我從csv文件讀取一些數據。文件中的每一行都有一個浮點值。這些值可以是:更正浮點值

  • 0.123:開始一段時間,所以我需要前添加一個零。
  • 1,23:有一個分隔符逗號','而不是句號,所以我需要改變它。
  • 1.2e3具有指數格式,所以我需要將其轉換爲十進制格式。

我不能使用功能number_format,因爲我無法設置小數點的數字(浮點數沒有小數部分的固定長度,我們想利用他們,因爲他們不會丟失數據)。

這是我到目前爲止所嘗試的;我建了兩個功能,第一個過濾花車,第二個糾正了他們,當過濾器返回false:

function validateFloat($float){ 
    if(!filter_var($float,FILTER_VALIDATE_FLOAT,array('flags' => FILTER_FLAG_ALLOW_FRACTION))){ 
    return false; 
    } 

} 

function correctFloat($float){ 
    if (validateFloat($float)==false){ 
    $number = number_format($float,null,'.'); 
    str_replace($number,'',$line); 
    } 
} 

我不知道如何構建correctFloat功能。有什麼建議麼 ?欣賞它。

回答

2

你的功能,可以檢查是否有一個逗號,並得到那麼正確deliminator在任何其他情況下

function change_format($value){ 
    if(is_string($value)){ 
     //has to be a string if using ',' 
     $value= str_replace(",",".",$value); 
    } 
    return floatval($value); 
} 

echo change_format(.123) ."<br>"; 
echo change_format("1,23") ."<br>"; 
echo change_format("1.2e3"); 

輸出使用floarval:

0.123 
1.23 
1200 
+0

冷靜,如果開頭是什麼「」 ? – Somar

+0

floatval填充它。使用更新我剛剛拼錯'$價值'很多... – nerdlyist

+0

這太棒了!謝謝。 – Somar