2017-04-27 25 views
0

在這個問題上的數字,我使用這個詞的科學背景顯著PHP找到的第一個科學地顯著「非零」的浮點數

我想要從一個浮動左側的前n位數。該函數應該包含在:

  • $ number這是浮點數。

  • $ n這是要檢索的數字量。

下面是一些示例輸入和輸出,我想函數返回:

  • 當$數= 5678和$ N = 2,則 - >的結果應該是:56
  • 當$ number = -69869和$ n = 4時 - >結果應該是:6986
  • 當$ number = 0.00676和$ n = 2時,那麼結果應該是:67
  • 當$ number = -0.0000048和$ n = 3然後 - >結果應該是:480

我嘗試了一些數學函數來實現這一目標,並得到了很遠,但最後一個給出

$result = (int)(abs($number)/pow(10,(int)(log10(abs($number)))-$n)); 

它返回479作爲答案的問題。這是因爲我正在處理浮點,我不知道解決這個問題。任何人?

回答

0

你可以用字符串來做。這是一個選項嗎?

$result = (int)str_pad(substr((int)str_replace('.','',preg_replace('/E‌​(.*)/','',abs($numbe‌​r))),0,$n),$n,'0',ST‌​R_PAD_RIGHT); 
+0

對不起,但沒有。在最後一個例子中它將返回0。因爲substr(str_replace('。','',abs($ number)),0,$ n);將返回48E。 E會導致錯誤。 –

+0

它適用於所有經過測試的PHP版本。你正在使用哪個版本?這是不是一般的選擇,或僅僅是因爲這個問題? – modsfabio

+0

它應該是'substr((int)str_replace('。','',abs($ number))'不'substr(str_replace('。','',abs($ number))'。它是正確的! – modsfabio

相關問題