将强制转换浮点数重新解释为整数

Bar*_*art 6 javascript floating-point integer casting typed-arrays

这个问题可能是"不寻常的",但我需要将float Number转换为整数Number,而不修改其二进制表示.

例如,浮点数37.5由字节表示0x42160000(根据IEEE 754).我需要重新解释0x42160000为整数,即数字1108738048

我该怎么做呢?我想可能有一些按位技巧来完成这个?

要清楚,我不是在寻找Math.roundparseInt.

pim*_*vdb 6

类型化数组在这里可以派上用场:http://jsfiddle.net/rtYrM/.

// create array which is specialized for holding 1 float value
var floatArray = new Float32Array(1);

// set the float value
floatArray[0] = 37.5;

// use its buffer (4 bytes for 1 float) and pass it to an array
// specialized for integers
var intArray = new Int32Array(floatArray.buffer);

// the integer array will interpret the buffer bytes as an integer,
// which seems to be just what you want
intArray[0] === 1108738048; //true
Run Code Online (Sandbox Code Playgroud)

intArray.buffer将保持相同的字节floatArray.buffer,但不是通过缓冲区访问它,而是使用数组本身,它将读取这些字节作为类型数组指定的类型:作为整数Int32Array,和浮点数Float32Array.

在这种情况下(在基数10):

  • floatArray设置为值[ 37.5 ].
  • floatArray.buffer自动设置为值[ 0, 0, 22, 66 ].
  • floatArray.buffer被传递给一个新的整数数组intArray.
  • intArray.buffer因此也包含这些值[ 0, 0, 22, 66 ].
  • intArray包含[ 1108738048 ]使用其缓冲区计算的值.