2010-09-30 35 views

回答

20

number_format總是會做到這一點,你唯一的辦法就是給它不同的東西:

$number = intval(($number*100))/100; 

或者:

$number = floor(($number*100))/100; 
+2

試試這個數字:0.29,它失敗! – Arsham 2013-08-22 10:59:14

+0

這樣做:$ finalCommishParts = explode('。',$ commission); ($ finalCommishParts [1])?substr($ finalCommishParts [1],0,2):'00'); $ finalCommish = $ finalCommishParts [0]。'。'。$ commisshSuffix; – 2014-05-15 12:37:26

+0

@AsafMaoz:注意區域設置與小數點分隔符的區別。 – Wrikken 2014-05-16 00:03:59

0

使用此功能:

function number_format_unlimited_precision($number,$decimal = '.') 
{ 
    $broken_number = explode($decimal,$number); 
    return number_format($broken_number[0]).$decimal.$broken_number[1]); 
} 
+0

你有額外的)$ broken_number [1]); – ddjikic 2013-08-08 20:24:07

+1

這不做任何事情:只是返回相同的輸入數字(也有支架拼寫錯誤)。 – T30 2015-04-28 14:36:56

+0

我知道這是一箇舊的迴應,這不是一個很好的答案,但讓我們清楚地知道有一個編輯,如果你看歷史,這個額外的支架是由這個Linus花花公子添加的,而不是原來的回答者。 – 2017-03-08 20:59:15

0
$finalCommishParts = explode('.',$commission); 
$commisshSuffix = (isset($finalCommishParts[1])?substr($finalCommishParts[1],0,2):'00'); 
$finalCommish = $finalCommishParts[0].'.'.$commisshSuffix; 
+1

請添加說明文字。在這個答案中我沒有看到'number_format(...)',所以它超出了我的答案:「如何使number_format()不會將數字向上舍入」 – Sumurai8 2014-07-19 17:48:27

+0

這段代碼實現了number_format的功能,但沒有將數字加起來。如上所述,檢查您的本地小數點分隔符。 – 2014-07-20 11:44:14

0
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; 
} 
+0

你不能爲($ i = 1; ...因爲$ brokenBackNumber [$ i]會忽略第一個字符 - 因爲$ brokenBackNumber是基於零的。你應該爲你的if語句還有一個'else {}'部分但我喜歡你的想法 – 2015-03-23 17:39:11

0

如果你不在乎什麼來小數點後,您可以施放floatint避免四捨五入:

$float = 2.8; 
echo (int) $float; // outputs '2' 
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!) 
+0

今天就用它,它像一個魅力工作 – samouray 2017-07-27 12:18:16

+0

你節省了我的時間謝謝 – 2017-12-20 10:25:01

2
**Number without round**   

    $double = '21.188624'; 
    echo intval($double).'.'.substr(end(explode('.',$double)),0,2); 

**Output** 21.18 
8

我知道,這一個老問題,但它仍然實際:)。

這個功能怎麼樣?

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 
0

如果你有小float值,您可以使用number_format功能這種方式。

$number = 21.23; 

echo number_format($number, 2, '.', ',')); // 21.23 

如果你有你有長十進制數,然後也將格式號這樣

$number = 201541.23; 

echo number_format($number, 2, '.', ',')); // 201,541.23 
0

使用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