Tôi có một thuật toán mà thực hiện các tính toán sau:Không có chức năng Truncate trong PHP - Tùy chọn?
- ((0,50 * 0) + 7)/10 = 0,70
- ((0,70 * 10) + 9)/20 = 0,80
- ((0,80 * 20) + 7)/30 = 0,7666666667 -> tôi muốn giá trị này để cắt ngắn để 0,76
vì vậy mà nó có thể đưa vào phần còn lại của việc tính toán như:
4a. ((0,76 * 30) + 8)/40 = 0,77
Và không để nuôi trong khi làm tròn lên hai chữ số thập phân như 0,77:
4b. ((0,77 * 30) + 8)/40 = 0,77
**** Sau đây dường như đã thất bại và thay vào đó buộc một vòng lên đến 0,77: ****
Các PHP sptrinf () chức năng: PHP dropping decimals without rounding up
Các PHP number_format() chức năng: PHP: show a number to 2 decimal places
tầng PHP() chức năng: Truncate float numbers with PHP
- Có cách nào khác không?
- Có thể nào đạt được những gì tôi muốn (cắt ngắn đến hai chữ số thập phân) bằng PHP không?
Vui lòng hỗ trợ. Cảm ơn nhiều.
CẬP NHẬT - SOLVED Ok, hiện tại, nó đang hoạt động nhờ dkamins và zneak. Tôi đã sử dụng cách tiếp cận floor() (tôi cho rằng tôi đã không làm điều gì đó đúng trong quá khứ). Tuy nhiên, hiện tại điều sau xảy ra:
ví dụ:
(0,86 * 30) + 9)/40 = 0,87 (nó nên), nhưng sau khi TRUNC nó = 0.86
Làm thế nào là nó cắt xén 0,87-0,86? Không có nghĩa lý gì. Có cách nào để làm cho nó cắt ngắn chỉ khi có nhiều hơn 2 chữ số thập phân?
SOLVED:
$numDecPlace = strlen(substr(strrchr($newRel, "."), 1));
echo '<p>Test: Number of decimal places=' .$numDecPlace. '</p>';
if($numDecPlace > 2) {
$newRel = floor($newRel * 100)/100; // Truncate to 2dp.
echo '<p>Test: New relationship truncated is $newRel=' .$newRel. '</p>';
}
Đã giải quyết cập nhật của tôi. – leokennedy
Bạn nên xem @Fernando Prieto [câu trả lời bên dưới] (http://stackoverflow.com/a/19124167/1890400). Ông sử dụng một phương pháp tiếp cận dựa trên chuỗi (phụ) tương tự như phần đầu tiên của giải pháp bạn đã chọn, nhưng cá nhân tôi nghĩ rằng nó có thể hiệu quả hơn và mạnh mẽ hơn. – Byson