2010-11-06 18 views
46

Tôi muốn biết nếu tồn tại một số chức năng để tự động định dạng một số bởi đó là số thập phân, vì vậy nếu tôi có:PHP số: decimal điểm có thể nhìn thấy chỉ nếu cần

<?php 
    // $sql_result["col_number"] == 1,455.75 
    number_format ($sql_result["col_number"], 2, ".", ""); 
    // will return 1455.75 

    // $sql_result["col_number"] == 1,455.00 
    number_format ($sql_result["col_number"], 2, ".", ""); 
    // could I get 1455 instead of 1455.00? 
?> 

nên câu trả lời của tôi là nếu không tồn tại một số cách để loại bỏ các số thập phân nếu tôi có DECIMAL dữ liệu forma trong DB của tôi chỉ khi nó tròn?

Hoặc tôi làm điều gì đó như vậy?

<?php 
    // $sql_result["col_number"] == 1,455.00 
    str_replace(".00", "", (string)number_format ($sql_result["col_number"], 2, ".", "")); 
    // will return 1455 
?> 
+1

Đây là câu trả lời ngắn gọn: http://stackoverflow.com/a/14531760/1431728 – JohnK

+3

@JohnK, tôi vừa nhận ra rằng liên kết mà bạn đưa ra cũng chính là người đã hỏi nó năm ngoái. Hahaha –

Trả lời

11

Tôi thực sự nghĩ rằng cách giải quyết của bạn cũng tốt như mọi thứ. Nó đơn giản và rõ ràng, và thực sự không có điểm nói về hiệu suất ở đây, vì vậy chỉ cần đi cho nó.

+5

Bạn có thể chỉ cần thêm 0 '1455.00 + 0' http://stackoverflow.com/questions/14531679/remove-useless-zero-digits-from-decimals-in-php –

+0

Cách giải quyết thay thế sẽ phá vỡ với số được biểu thị bằng châu Âu định dạng quốc gia, như Đức hoặc Tây Ban Nha. Ví dụ 9.000 ở Đức là 9.000,00 và điều này sẽ trở thành một cái gì đó như 90,00 – Cesc

8

Như Emil nói bạn là tốt. Nhưng nếu bạn muốn xóa 0 từ ví dụ: 7.50 quá, tôi đã có một gợi ý, rtrim():

<?php 
    // if $sql_result["col_number"] == 1,455.50 
    rtrim(rtrim(number_format($sql_result["col_number"], 2, ".", ""), '0'), '.'); 
    // will return 1455.5 
?> 
+1

Tôi nghĩ rằng sẽ có một lỗi bằng cách sử dụng 'rtrim' trong tình huống này, ví dụ,' rtrim ('1230.00', '0.'); 'Sẽ cho 123 thay vì 1230. – bobo

+0

@bobo, Cảm ơn, chỉnh sửa :) –

+0

V giải pháp tốt đẹp Halil..Cảm ơn :) –

0

Thật sự tôi nghĩ rằng cách sạch nhất tôi có thể nghĩ ra để làm việc này cho ai đó mà chỉ cần làm một tìm kiếm tìm kiếm các loại điều này là để làm điều này:

(number_format ($sql_result["col_number"], 2) * 100)/100; 
-1

gì về

number_format($value,2) - 0; 
0

Warren.S câu trả lời giúp tôi ra ngoài. Tôi không cần hàm number_format, vì vậy tôi đã thực hiện điều này

$value=$value-0; 

Nhưng trong trường hợp của OP, anh ta cần number_format để xóa dấu phẩy. Vì vậy, điều này sẽ làm việc cho anh ta

$value=number_format ($sql_result["col_number"], 2, ".", "")-0; 
20

floatval hoặc đơn giản là đúc nổi

php > echo floatval(7.00); 
7 
php > echo floatval(2.30); 
2.3 
php > echo floatval(1.25); 
1.25 
php > echo floatval(1.125); 
1.125 

php > echo (float) 7.00; 
7 
php > echo (float) 2.30; 
2.3 
php > echo (float) 1.25; 
1.25 
php > echo (float) 1.125; 
1.125 
+1

truyền đến float là cho đến nay tùy chọn tốt nhất –

+4

Bất kỳ ai muốn áp dụng điều này vào một chuỗi nên cẩn thận với các giá trị bằng dấu phẩy như " 1.000,99 "Nổi giá trị này sẽ trả lại 1. –

+0

floatval() đã hoạt động cho tôi :) –

3

Bạn cũng có thể sử dụng rtrim(), trong đó sẽ loại bỏ 0s dư thừa, trong trường hợp bạn có thể muốn giữ một vị trí thập phân nhưng không phải số dư thừa. (Ví dụ, 4.50 trở thành 4.5.) Cũng cho phép bạn thay đổi số chữ số thập phân từ 2 sang bất kỳ số nào khác.

rtrim(rtrim((string)number_format($value, 2, ".", ""),"0"),"."); 

// 4.00 -> 4 
// 4.50 -> 4.5 
// 4.54000000 -> 4.54 (if you're doing more decimal places) 
0

Vì tôi không thể tìm thấy một giải pháp linh hoạt, tôi đã viết một chức năng đơn giản để có được kết quả tốt nhất:

function getValueFormattedWithMinimalDecimals($value, $max_decimals = 2, $dec_point = ',', $thousands_sep = '') { 
    $bestNumberOfDecimals = -1; 
    $decimal = 0; 
    while ($decimal <= $max_decimals) { 
     $bestNumberOfDecimals = $decimal; 
     $valueDecimals = number_format($value, $decimal); 
     if (floatval($value) == $valueDecimals) { 
      break; 
     } 
     $decimal++; 
    } 
    if($bestNumberOfDecimals > 0 && number_format($value, $bestNumberOfDecimals) == number_format($value, 0)) { 
     $bestNumberOfDecimals = 0; 
    } 

    return number_format($value, $bestNumberOfDecimals, $dec_point, $thousands_sep); 
} 
0

Nếu bạn đang nhắm mục tiêu tiền tệ Mỹ Tôi thích sử dụng phương pháp này:

function moneyform($number, $symbol = true) { 
    return str_replace(".00", "", money_format(($symbol? '%.2n' : "%!n"), $number)); 
} 

moneyform(1300999); 
-->$1,300,999 

moneyform(2500.99); 
-->$2,500.99 

moneyform(2500.99, false); 
-->2,500.99 
Các vấn đề liên quan