[英]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.