重新解释将浮点数转换为整数
这个问题可能是“不寻常”,但我需要转换的浮动Number为整数Number ,而不改变其二进制表示。
例如,浮点数37.5由字节0x42160000 (根据IEEE 754)表示。 我需要重新解释0x42160000作为一个整数,即数字1108738048
我该怎么做呢? 我在想,可能会有一些按位技巧来实现这个目标?
要清楚,我不是在寻找Math.round或parseInt 。
类型数组可以派上用场: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
intArray.buffer将保存与floatArray.buffer相同的字节,但不通过缓冲区访问它,而是使用数组本身,它将读取这些字节作为类型数组指定的类型:作为Int32Array整数,以及作为Float32Array 。
在这种情况下(以10为底):
floatArray被设置为值[ 37.5 ] 。 floatArray.buffer自动设置为值[ 0, 0, 22, 66 ] floatArray.buffer [ 0, 0, 22, 66 ] 。 floatArray.buffer被传递给一个新的整数数组intArray 。 intArray.buffer也包含值[ 0, 0, 22, 66 ] intArray.buffer [ 0, 0, 22, 66 ] 。 intArray包含用其缓冲区计算的值[ 1108738048 ] 。 我不相信Javascript包含这样做的任何机制。 在Java中有一个方法java.lang.Float.floatBitsToIntBits() ,所以根据你想要的环境,你可能会使用它。 如果一切都失败了,您可能需要将数据发送回服务器进行转换。 或者,我已经看到尝试使用Javascript方法来做这种转换,但从来没有一个100%完整和正确的转换。
上一篇: Reinterpret cast floating point number to integer
下一篇: How Were These Coefficients in a Polynomial Approximation for Sine Determined?
