PHP格式化金額,小數位擷取而非四捨五入,末尾控制是否0補齊
阿新 • • 發佈:2019-02-02
格式化金額,小數位擷取而非四捨五入
<?php /** * @name 小數位擷取格式化金額 例如 100000.00 -> 100,000.00 * @param float $num [格式化前的金額] * @param integer $dist [保留的小數位數] * @param BOOL $zeroComplete [小數位不夠dist時,是否用0補齊] * @return [type] [description] */ if (!function_exists('numberFormat')) { function numberFormat($num = 0, $dist =2, $zeroComplete = TRUE) { if (!preg_match('/^(-?\d+)(\.\d+)?$/', $num)) { return $num; } if ($dist > 4) { $dist = 4; }else if ($dist <= 0) { $dist = 0; } if (!is_bool($zeroComplete)) { $zeroComplete = TRUE; } $newNum = floor($num * pow(10, $dist)) / pow(10, $dist); if (!$zeroComplete) { //去掉小數末尾的0 $newNum = floatZeroCut($newNum); $pos = strpos(strval($newNum), '.');//獲取小數點位置 if (!$pos) { //如果沒找到 $dist = 0; }else { $dist = strlen(strval($newNum)) - $pos - 1; } } $result = number_format($newNum, $dist); return $result; } } /** * 自動去掉小數末尾的0 * @param float $num [小數] * @return float [返回去掉小數末尾0的小數] */ if (!function_exists('floatZeroCut')) { function floatZeroCut($num = 0.00) { if (!preg_match('/^(-?\d+)(\.\d+)?$/', $num)) { return '引數錯誤'; } if ((int)($num) == $num) { return $num; } $strNum = strval($num); if (substr($num, -1) == '0'){ $strNum = substr($strNum, 0, strlen($num) - 1); return floatZeroCut(floatval($strNum)); }else { return floatval($strNum); } } }