问题
Javascript stores all numbers as double-precision 64-bit format IEEE 754 values according to the spec:
The Number type has exactly 18437736874454810627 (that is, 264−253+3) values, representing the double-precision 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic
Is there any way to see the number in this form in Javascript?
回答1:
You can use typed arrays to examine the raw bytes of a number. Create a Float64Array
with one element, and then create a Uint8Array
with the same buffer. You can then set the first element of the float array to your number, and examine the bytes via the Uint8Array
. You'll have to do some shifting and combining for the various pieces of the number of course, but it's not hard.
There are no built-in facilities to do things like extract the exponent.
回答2:
Based on @Pointy's suggestion I've implemented the following function to get a number in it's 64 bit float IEEE754 representation:
function to64bitFloat(number) {
var f = new Float64Array(1);
f[0] = number;
var view = new Uint8Array(f.buffer);
var i, result = "";
for (i = view.length - 1; i >= 0; i--) {
var bits = view[i].toString(2);
if (bits.length < 8) {
bits = new Array(8 - bits.length).fill('0').join("") + bits;
}
result += bits;
}
return result;
}
console.log(to64bitFloat(12)); // 0100000000101000000000000000000000000000000000000000000000000000
console.log(to64bitFloat(-12)); // 1100000000101000000000000000000000000000000000000000000000000000
来源:https://stackoverflow.com/questions/37088194/is-there-any-way-to-see-a-number-in-its-64-bit-float-ieee754-representation