我有這個數:使用number_format($double, 2, ',', ' ')
如何使number_format()不圓人數達到
$double = '21.188624';
後我得到:
21,19
但我想要的是:
21,18
任何ideea我該如何做這項工作?
謝謝。
我有這個數:使用number_format($double, 2, ',', ' ')
如何使number_format()不圓人數達到
$double = '21.188624';
後我得到:
21,19
但我想要的是:
21,18
任何ideea我該如何做這項工作?
謝謝。
number_format
總是會做到這一點,你唯一的辦法就是給它不同的東西:
$number = intval(($number*100))/100;
或者:
$number = floor(($number*100))/100;
floor($double*100)/100
使用此功能:
function number_format_unlimited_precision($number,$decimal = '.')
{
$broken_number = explode($decimal,$number);
return number_format($broken_number[0]).$decimal.$broken_number[1]);
}
$finalCommishParts = explode('.',$commission);
$commisshSuffix = (isset($finalCommishParts[1])?substr($finalCommishParts[1],0,2):'00');
$finalCommish = $finalCommishParts[0].'.'.$commisshSuffix;
請添加說明文字。在這個答案中我沒有看到'number_format(...)',所以它超出了我的答案:「如何使number_format()不會將數字向上舍入」 – Sumurai8 2014-07-19 17:48:27
這段代碼實現了number_format的功能,但沒有將數字加起來。如上所述,檢查您的本地小數點分隔符。 – 2014-07-20 11:44:14
public function numberFormatPrecision($number, $separator = '.', $format = 2){
$response = '';
$brokenNumber = explode($separator, $number);
$response = $brokenNumber[0] . $separator;
$brokenBackNumber = str_split($brokenNumber[1]);
if($format < count($brokenBackNumber)){
for($i = 1; $i <= $format; $i++)
$response .= $brokenBackNumber[$i];
}
return $response;
}
你不能爲($ i = 1; ...因爲$ brokenBackNumber [$ i]會忽略第一個字符 - 因爲$ brokenBackNumber是基於零的。你應該爲你的if語句還有一個'else {}'部分但我喜歡你的想法 – 2015-03-23 17:39:11
如果你不在乎什麼來小數點後,您可以施放float
爲int
避免四捨五入:
$float = 2.8;
echo (int) $float; // outputs '2'
我用這個函數:
function cutNum($num, $precision = 2){
return floor($num).substr($num-floor($num),1,$precision+1);
}
floor($num)
是整數部分,$num-floor($num)
是小數(如0.2345)。
所以substr($num-floor($num),1,$precision+1)
得到「.23」(注意這一點也取決於)。
使用示例:
cutNum(1.2345) //returns 1.23
cutNum(1.2345,3) //returns 1.234
cutNum(1.2345,10) //returns 1.2345
cutNum(1.2345,0) //returns 1. (!don't use with zero as second argument: use floor instead!)
今天就用它,它像一個魅力工作 – samouray 2017-07-27 12:18:16
你節省了我的時間謝謝 – 2017-12-20 10:25:01
**Number without round**
$double = '21.188624';
echo intval($double).'.'.substr(end(explode('.',$double)),0,2);
**Output** 21.18
我知道,這一個老問題,但它仍然實際:)。
這個功能怎麼樣?
function numberFormatPrecision($number, $precision = 2, $separator = '.')
{
$numberParts = explode($separator, $number);
$response = $numberParts[0];
if(count($numberParts)>1){
$response .= $separator;
$response .= substr($numberParts[1], 0, $precision);
}
return $response;
}
用法:
// numbers test
numberFormatPrecision(19, 2, '.'); // expected 19 return 19
numberFormatPrecision(19.1, 2, '.'); //expected 19.1 return 19.1
numberFormatPrecision(19.123456, 2, '.'); //expected 19.12 return 19.12
// negative numbers test
numberFormatPrecision(-19, 2, '.'); // expected -19 return -19
numberFormatPrecision(-19.1, 2, '.'); //expected -19.1 return -19.1
numberFormatPrecision(-19.123456, 2, '.'); //expected -19.12 return -19.12
// precision test
numberFormatPrecision(-19.123456, 4, '.'); //expected -19.1234 return -19.1234
// separator test
numberFormatPrecision('-19,123456', 3, ','); //expected -19,123 return -19,123 -- comma separator
如果你有小float
值,您可以使用number_format
功能這種方式。
$number = 21.23;
echo number_format($number, 2, '.', ',')); // 21.23
如果你有你有長十進制數,然後也將格式號這樣
$number = 201541.23;
echo number_format($number, 2, '.', ',')); // 201,541.23
使用PHP的本地函數bcdiv。
function numberFormat($number, $decimals = 2, $sep = ".", $k = ","){
$number = bcdiv($number, 1, $decimals); // Truncate decimals without rounding
return number_format($number, $decimals, $sep, $k); // Format the number
}
詳情請參閱this answer。
試試這個數字:0.29,它失敗! – Arsham 2013-08-22 10:59:14
這樣做:$ finalCommishParts = explode('。',$ commission); ($ finalCommishParts [1])?substr($ finalCommishParts [1],0,2):'00'); $ finalCommish = $ finalCommishParts [0]。'。'。$ commisshSuffix; – 2014-05-15 12:37:26
@AsafMaoz:注意區域設置與小數點分隔符的區別。 – Wrikken 2014-05-16 00:03:59