重新解释将浮点数转换为整数
这个问题可能是“不寻常”,但我需要转换的浮动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?