2016-11-08 99 views
2

假設我有一個表單,我要求產品的價格。基本上,我不考慮用戶添加數千個逗號的情況,即:1,000.00或1,000,000.00PHP函數安全地返回字符串中的浮點數

我只考慮用戶輸入1000.00或1000,00或1000000.00但從未1,000.00或10,000,000.00的情況或者,甚至最差,10.000.000,00

我想出了這個功能。

function getPrice($price) 
{ 
    if (is_string($price)) { 
     if (strpos($price, ",") !== false) { 
      $price = str_replace(',', '.', $price); 
     } 
    } 
    return (is_numeric($price)) ? floatval($price) : false; 
} 

您認爲安全嗎?你能指出改進嗎?

+0

@Devon再次閱讀這個問題......他不考慮1000.00的情況下只是1000.00 – Jackowski

+0

@Jackowski,你是對的,我第一次瀏覽。 – Devon

+0

字符串替換是不必要的,floatval已經將''''或'.'作爲小數點分隔符。 – Devon

回答

1

除了最後一行floatval以外,你的功能對我來說看起來還行。

我對這種方法的主要考慮是PHP不會正確地代表float,這要歸功於:floatval,轉換爲float或帶有浮點變量的算術運算。

例如,PHP可能會根據精度設置將10000.00轉換爲9999,99。如果他們解析到FLOAT(在getPrice功能)後,需要這個價格有些算術運算(你可以閱讀更多關於此這裏http://php.net/manual/en/language.types.float.php

,你需要精度那麼我的建議是避免解析到FLOAT,要麼:

  • 離開他們的字符串,並做處理字符串的計算
  • 使用BC MATH擴展獲得更精確的數學運算在PHP
+0

考慮到精度,我沒有。我將刪除floatval(),因爲我將使用該數字進行算術運算。此外,鏈接+1和提及BC數學擴展。 –