有没有办法在里面看到一个数字'的64位浮点IEEE754表示

Is there any way to see a number in it's 64 bit float IEEE754 representation

本文关键字:64位 表示 IEEE754 数字 一个 在里面 有没有      更新时间:2023-09-26

Javascript根据规范将所有数字存储为双精度64位格式的IEEE 754值:

数字类型正好有18437736874454810627(即264−253+3)值,表示双精度64位格式IEEE 754IEEE二进制浮点标准中规定的值算术

有没有办法在Javascript中看到这种形式的数字?

您可以使用类型化数组来检查数字的原始字节。创建一个带有一个元素的Float64Array,然后创建一个具有相同缓冲区的Uint8Array。然后,您可以将浮点数组的第一个元素设置为您的数字,并通过Uint8Array检查字节。当然,你必须对数字的各个部分进行一些移位和组合,但这并不难。

没有像提取指数这样的内置功能。

根据@Pointy的建议,我实现了以下函数,以在其64位浮点IEEE754表示中获取一个数字:

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

您可以使用Basenumber.js将数字转换为其IEEE754表示形式:

let x = Base(326.9);
let y = Base(-326.9);
// specify double precision (64)
let a = x.toIEEE754(64);
let b = y.toIEEE754(64);
console.log(a);
console.log(b);
// You can join them in an unique string this way
console.log(Object.values(a).join(""));
console.log(Object.values(b).join(""));
<script src='https://cdn.jsdelivr.net/gh/AlexSp3/Basenumber.js@main/BaseNumber.min.js'></script>