当我将浮点数写入缓冲区时,它不会读回相同的值:
> var b = new Buffer(4);
undefined
> b.fill(0)
undefined
> b.writeFloatBE(3.14159,0)
undefined
> b.readFloatBE(0)
3.141590118408203
>
(^C again to quit)
>
Run Code Online (Sandbox Code Playgroud)
为什么?
编辑:
我的工作理论是,因为 javascript 将所有数字存储为双精度,所以当缓冲区实现读回浮点数时,可能无法正确地将双精度数的其他 4 个字节归零:
> var b = new Buffer(4)
undefined
> b.fill(0)
undefined
> b.writeFloatBE(0.1,0)
undefined
> b.readFloatBE(0)
0.10000000149011612
>
Run Code Online (Sandbox Code Playgroud)
我认为这表明小数点后 7 位数字为零(实际上是 8 位),然后就是垃圾。我认为读取这些浮点数的节点缓冲区代码中存在错误。那就是我所想的。这是节点版本 0.10.26。