2010-09-30 32 views

Trả lời

20

number_format sẽ luôn luôn làm như vậy, giải pháp duy nhất của bạn là để nuôi nó một cái gì đó khác nhau:

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

Hoặc:

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

Hãy thử điều này với số này: 0,29 và không thành công! – Arsham

+0

làm điều này: $ finalCommishParts = explode ('.', $ Hoa hồng); $ commisshSuffix = (isset ($ finalCommishParts [1])? Substr ($ finalCommishParts [1], 0,2): '00'); $ finalCommish = $ finalCommishParts [0]. '.'. $ CommisshSuffix; –

+0

@AsafMaoz: hãy cẩn thận với sự khác biệt giữa dấu phân cách thập phân với ngôn ngữ. – Wrikken

0

sử dụng chức năng này:

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

bạn có thêm) $ broken_number [1]); – ddjikic

+1

Điều này không có gì: chỉ cần trả về cùng một số đầu vào khi nó được truyền (cũng có lỗi chính tả). – T30

+0

Tôi biết đó là câu trả lời cũ và không phải là câu trả lời thực sự hay, nhưng hãy hiểu rõ rằng có một bản chỉnh sửa và nếu bạn nhìn vào lịch sử, khung phụ được thêm bởi anh chàng Linus này chứ không phải bởi người trả lời ban đầu. –

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

Vui lòng thêm văn bản giải thích. Tôi không nhìn thấy 'number_format (...)' trong câu trả lời này, vì vậy nó vượt ra ngoài tôi như thế nào câu trả lời này "Làm thế nào để làm cho number_format() không làm tròn số" – Sumurai8

+0

Đoạn mã này làm những gì number_format, nhưng không có làm tròn số. Như đã đề cập ở trên, hãy kiểm tra dấu phân cách thập phân cục bộ của bạn. –

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

Bạn không thể có ($ i = 1; ... vì $ brokenBackNumber [$ i] sau đó sẽ bỏ lỡ ký tự đầu tiên - vì $ brokenBackNumber bằng 0. Bạn cũng nên có phần 'else {}' cho câu lệnh if của mình Nhưng tôi thích ý tưởng của bạn –

0

Trong trường hợp bạn không chăm sóc cho những gì đến đằng sau dấu thập phân, bạn có thể cast float như một int để tránh làm tròn:

$float = 2.8; 
echo (int) $float; // outputs '2' 
2

tôi sử dụng chức năng này:

function cutNum($num, $precision = 2){ 
    return floor($num).substr($num-floor($num),1,$precision+1); 
} 

floor($num) là phần nguyên và $num-floor($num) là số thập phân (như 0,2345).

Vì vậy, substr($num-floor($num),1,$precision+1) nhận ".23" (lưu ý rằng điểm cũng được lấy).

ví dụ sử dụng:

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

Sử dụng nó ngay hôm nay và nó hoạt động như một nét duyên dáng – samouray

+0

Bạn đã tiết kiệm thời gian của tôi Cảm ơn –

2
**Number without round**   

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

**Output** 21.18 
8

Tôi biết rằng đây là một câu hỏi cũ, nhưng nó vẫn thực tế :).

Làm thế nào về chức năng này?

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

Cách sử dụng:

// 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

Trong trường hợp bạn có float giá trị nhỏ, bạn có thể sử dụng chức năng number_format theo cách này.

$number = 21.23; 

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

Trong trường hợp bạn có bạn có số thập phân dài sau đó cũng nó sẽ định dạng số theo cách này

$number = 201541.23; 

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

Sử dụng PHP có nguồn gốc chức năng 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 
} 

Xem this answer để biết thêm chi tiết.

Các vấn đề liên quan