Tiếp tục câu trả lời knabar của:
Nếu số của bạn thực sự là một đầy đủ 64 bit mỏi bạn nên biết rằng javascript đã chỉ tăng gấp đôi, mà đầu ra vào khoảng 53 bit chính xác. Ví dụ.
var i = 0x89abcdef; // a 64-bit constant
var h = ("000000000000000" + i.toString(16)).substr(-16); // "89abcdef"
Vì vậy, bạn có thể muốn chia thành hai số 32 bit và định dạng chúng thành 8 chữ số cùng một lúc. Sau đó, cảnh báo thứ hai xảy ra: javascript thực hiện các thay đổi bit trên đã ký số nguyên 32 bit và mã định dạng này không thể xử lý số âm.
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + i.toString(16)).substr(-8); // "0-2e0000"
Vì nó là khá khả năng là số mà bạn muốn định dạng theo hệ thập lục phân là kết quả của thao tác trên bit, mã có thể được tinh chỉnh để in trong bổ sung hai thay vì:
var i = 0xffd2 << 16; // actually negative
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "ffd20000"
này tạo ra các đại diện hex của 32 bit dưới cùng của phần không thể tách rời của số dương và số âm bất kỳ. Đây có lẽ là những gì bạn muốn (khoảng printf("%08x")
). Một số trường hợp góc khác:
var i = 1.5; // non-integers are rounded
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "00000001"
var i = -1.5; // rounding is towards zero
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "ffffffff"
var i = NaN; // not actually a number
var h = ("0000000" + ((i|0)+4294967296).toString(16)).substr(-8); // "00000000"
Có thật không may là không có cách nào để định dạng số thập lục phân như trong JavaScript. Nhưng hãy xem [liên kết này] (http://josscrowcroft.github.com/accounting.js/), có thể nó sẽ giúp ích cho bạn. – Neq