Số 1.#J là nghĩa gì ?

Số 1.#J là nghĩa gì


số 1.#J hay -1.#J là số vô cực, đơn giản vậy thôi ^.^ 

khi lập trình đôi khi bạn sẽ thấy trả về giá trị 1.#J và không hiểu nó nghĩa gì.

sau khi tìm hiểu thì đó là số vô cực khi chia cho số 0.

có vô cực dương và vô cực âm.

khi làm việc với CSDL database SQL thì các số này sẽ gây ra lỗi, 

vì vậy cần xử lý số vô cực trước khi Insert và database sql.


nguồn tiếng Anh

The Visual C runtime library arbitrarily decided that all of the exceptional values have one digit before the decimal (namely, the “1”). Actually, it turns out that this puzzle might be an answer to Random832’s question, “What’s the 1 for?” Maybe the 1 is there so that there is a digit at all.

Okay, so now you have one digit before the decimal (the “1”), and now you need to show at most two places after the decimal. But “#INF” is too long to fit into two characters. The C runtime then says, “Well, then I’d better round it off to two places, then.”

The first character is “#”. The second character is “I”. Now we need to round it. That’s done by inspecting the third character, which is “N”. We all learned in grade school that you round up if the next digit is 5 or greater. And it so happens that the code point for “N” is numerically higher than the code point for “5”, so the value is rounded up by incrementing the previous digit. Incrementing “I” gives you “J”.

That’s why printing IEEE positive infinity to two places gives you the strange-looking “1#J”. The J is an I that got rounded up.


dịch Google

Thư viện thời gian chạy Visual C tùy ý quyết định rằng tất cả các giá trị đặc biệt đều có một chữ số trước dấu thập phân (cụ thể là “1”). Trên thực tế, hóa ra câu đố này có thể là câu trả lời cho câu hỏi của Random832, "Số 1 để làm gì?" Có lẽ số 1 ở đó để có một chữ số.

Được rồi, vì vậy bây giờ bạn có một chữ số trước dấu thập phân ("1") và bây giờ bạn cần hiển thị nhiều nhất hai vị trí sau dấu thập phân. Nhưng “#INF” quá dài để chứa hai ký tự. Sau đó, bộ thực thi C sẽ nói, "Vậy thì tốt hơn là tôi nên làm tròn nó thành hai vị trí."

Ký tự đầu tiên là “#”. Ký tự thứ hai là “tôi”. Bây giờ chúng ta cần phải làm tròn nó. Điều đó được thực hiện bằng cách kiểm tra ký tự thứ ba, đó là “N”. Tất cả chúng ta đã học ở trường tiểu học rằng bạn làm tròn số nếu chữ số tiếp theo là 5 hoặc lớn hơn. Và điều đó xảy ra là điểm mã cho “N” cao hơn về mặt số lượng so với điểm mã cho “5”, vì vậy giá trị được làm tròn lên bằng cách tăng chữ số trước đó. Tăng "I" mang lại cho bạn "J".

Đó là lý do tại sao in vô cực dương IEEE đến hai vị trí mang lại cho bạn “1#J” trông lạ mắt. Chữ J là chữ I được làm tròn lên.


Link tham khảo

https://devblogs.microsoft.com/oldnewthing/20130228-01/?p=5103