javascript – Node.js / V8中没有真正的浮点类型?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Node.js / V8中没有真正的浮点类型?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1346字,纯文字阅读大概需要2分钟。
内容图文
我尝试通过Node.js中的Buffer存储一个浮点值
> f = 3.3
3.3
> var buf = new Buffer(32)
> buf.writeFloatBE(f);
4
> g = buf.readFloatBE();
3.299999952316284
然后我发现readFloatBE()之后的存储值g不等于原始f.
经过进一步研究,存储g和f的那两个缓冲值是相同的.
> var buf1 = new Buffer(4); buf1.writeFloatBE(f); buf1
<Buffer 40 53 33 33>
> var buf2 = new Buffer(4); buf2.writeFloatBE(g); buf2
<Buffer 40 53 33 33>
根据这个Buffer reading and writing floats,我们知道应该在这里使用writeDoulbeBE.
> var buf3 = new Buffer(8);
> buf3.writeDoubleBE(f);
8
> h = buf3.readDoubleBE();
3.3
> h === f
true
我想知道为什么在Node.js或V8中没有使用float类型?请参阅V8中的code
// Fast primitive setters
V8_INLINE void Set(bool value);
V8_INLINE void Set(double i);
V8_INLINE void Set(int32_t i);
V8_INLINE void Set(uint32_t i);
似乎V8中没有浮动类型,这个设计的任何原因还是我错过了什么?在这种情况下,是否应该使用此函数writeFloatBE()?
解决方法:
It seems there is NO
float
type in V8
是的,这是设计的:JavaScript中也没有float类型.所有数字都是双打as specified by the ECMAScript standard.
因此,您的数字f是双精度的3.3,而g只有浮点精度.如你所见,这与f不同.如果您使用其中一个buf.writeInt …方法,则会发生同样的情况,读取后的结果只有3而不是3.3.
In which case, should the function
writeFloatBE()
be used?
是的,当然,只要您想在缓冲区中存储具有浮点精度的数字,就应该使用它.如果要以完全精度存储f,请使用writeDoubleBE.
内容总结
以上是互联网集市为您收集整理的javascript – Node.js / V8中没有真正的浮点类型?全部内容,希望文章能够帮你解决javascript – Node.js / V8中没有真正的浮点类型?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。