Em đang nghĩ "tham lam" một chút, nếu hàm Round không cho kết quả chính xác như vậy thì người ta sẽ xử lý vấn đề này như thế nào trên các phần mềm không có hàm Round "ngon lành" như Excel nhỉ? Chẳng hạn VB6 hoặc VBA cho Word, PowerPoint.
Bạn không nên nghĩ theo kiểu: Hàm này "
không cho kết quả chính xác"
Hàm bạn "cố ý" viết như thế nào thì nó hoạt động như thế ấy. Thế nào là "cho kết quả chính xác"? Hàm "cho kết quả chính xác" là hàm làm đúng như dụng ý của người viết ra nó. Thế thôi.
Trong Toán bạn có qui tắc làm tròn. Qui tắc ấy chỉ có một. Nhưng trong lập trình thì bạn có thể tự viết 3, 4 hàm mà mỗi hàm làm tròn theo một kiểu. Được không? Dĩ nhiên là được. Cùng lắm thì hàm của bạn ít có ứng dụng. Thế thôi. Làm gì có chuyện hàm "
cho kết quả chính xác" hay "
không cho kết quả chính xác" như bạn nghĩ ở đây. Bạn chỉ có thể nói: Các hàm đó hoạt động khác với qui tắc TÔI từng biết trong Toán. Nhưng dụng ý của người viết hàm là thế. Nếu hàm cho kết quả đúng như dụng ý của người lập trình thì nó là hàm "
cho kết quả chính xác". Chấm hết.
Trong Toán làm gì có chuyện LUÔN làm tròn xuống dưới? Thế nhưng người ta viết hàm luôn làm tròn xuống dưới (ROUNDDOWN) đấy. "không cho kết quả chính xác" à? Còn có hàm luôn làm tròn lên trên (ROUNDUP) đấy. "không cho kết quả chính xác" à? Hàm là hàm. Nó làm đúng ý người lập trình. Thế thôi. Còn chuyện nó làm "ngược đời", không giống như bạn đã quen hoặc nó không có ứng dụng nhiều thì đã sao. Không thể vì thế mà nói hàm "không cho kết quả chính xác".
Trong Delphi có hàm
Round. Bạn thấy nó đeo huy hiệu
Round là bạn nghĩ nó làm đúng như trong Toán bạn từng biết? Nếu không đúng như trong Toán thì là hàm "
không cho kết quả chính xác"? Làm gì có chuyện đó. Hàm
Round trong Delphi luôn làm tròn đến
số nguyên. Và nếu số cần làm tròn nằm chính xác giữa 2 số nguyên thì
Round luôn làm tròn tới SỐ CHẴN. Tức không có chuyện LUÔN XUỐNG hay LUÔN LÊN ở đây. Như thế là hàm "
không cho kết quả chính xác"? Không thể nói thế được vì hàm người ta viết ra nó hoạt động như thế, và người ta cũng nói rõ là nó sẽ hoạt động như thế. Cùng lắm là nó không đáp ứng được nhu cầu của anh chứ không thể nói nó "
không cho kết quả chính xác". Tất nhiên cái hàm "vô dụng" đó đối với anh nó có thể lại thỏa mãn được nhu cầu của người khác.
Tôi đính kèm ảnh. Trong help nói rõ
Round của Delphi sẽ hoạt động như thế nào. Và có 1 test nhỏ.
Đúng thế: 2.5 và 4.5 được làm tròn tới
2 và
4 (làm tròn xuống), còn 3.5 và 5.5 được làm tròn tới
4 và
6 (làm tròn lên). Tức chúng được làm tròn tới
số chẵn.
Giống trong Toán không? Không giống. Nhưng làm gì có chuyện hàm "
không cho kết quả chính xác". Nó được viết để làm đúng như thế. Thế thôi. Đừng cứ thấy là hàm đeo huy hiệu
ROUND là nghĩ nó phải làm đúng như qui tắc đã biết trong Toán.
Thay vì cho là hàm "
không cho kết quả chính xác" thì nên hiểu một điều là mỗi hàm được viết để hoạt động theo một cách nào đó. Phải
biết và nhớ là nó sẽ hoạt động như thế nào để dùng cho đúng với nhu cầu của mình. Nếu không có hàm nào có sẵn đúng y hệt như mình cần thì phải tự viết thôi.