簡體   English   中英

PHP 在十進制的 4 個非零數字后切掉數字

[英]PHP slice off numbers after 4 non zero numbers in decimal

我想做的是:

0.000000023455676554434 -> 0.0000002345
0.00000000000000000000002656565-> 0.00000000000000000000002656
0.012345 -> 0.01234

到目前為止的代碼:

bcdiv(rtrim(sprintf('%.20f', $decimal), '0'),1,13);

當前代碼刪除了科學記數法,如果有的話,會在末尾修剪任何零,並在小數點后 13 個小數點后去除小數。 但是如果小數點類似於0.023123123235435346它仍然會顯示 13 個小數點,而我只希望得到0.02312

任何幫助將不勝感激。

您可以使用以 10 為底的日志來獲取點和第一位數字之間的零數。 這會做你想要的:

$decimal = "0.00000000000000000000002656565";
echo bcdiv($decimal, 1, -1*floor(log($decimal, 10))-1+4);

Output:0.00000000000000000000002656

我認為 preg_replace 也很容易做到。 該值應該作為字符串而不是浮點數提供。

$trimValue = preg_replace('~(\d*\.0*[1-9]{4}).*~','$1',$value);

如果您想在第一個非零數字之后有 4 個數字,請使用以下命令:

$trimValue = preg_replace('~(\d*\.0*[1-9]\d{3}).*~','$1',$value);

完整的測試(第一個變體):

$data = [
  '0.000000023455676554434', // -> 0.0000002345
  '0.00000000000000000000002656565', //-> 0.00000000000000000000002656
  '0.012345', // -> 0.01234
  '0.023123123235435346', //0.02312
  '0.00565',
];

$trimValues = [];
foreach($data as $value){
  $trimValues[] = preg_replace('~(\d*\.0*[1-9]{4}).*~','$1',$value);
}

echo '<pre>';
var_export($trimValues);

Output:

array (
  0 => '0.00000002345',
  1 => '0.00000000000000000000002656',
  2 => '0.01234',
  3 => '0.02312',
  4 => '0.00565',
) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM