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

这个问题可能是“不寻常”,但我需要转换的浮动Number为整数Number ,而不改变其二进制表示。

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

我该怎么做呢? 我在想,可能会有一些按位技巧来实现这个目标?

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


类型数组可以派上用场: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%完整和正确的转换。

    链接地址: http://www.djcxy.com/p/85599.html

    上一篇: Reinterpret cast floating point number to integer

    下一篇: How Were These Coefficients in a Polynomial Approximation for Sine Determined?