美文网首页
关于JavaScrit的数值精度问题解决

关于JavaScrit的数值精度问题解决

作者: 落辰风雷 | 来源:发表于2017-08-11 00:31 被阅读0次

本文中采用的代码示例都为javaScript代码

最近在刷一些javaScript的相关题目,过程中一个坑爹的细节问题让我很无语,代码如下:

let num_1 = 0.8;
let num_2 = 0.2;
console.log(num_1 - num_2 === 0.6);//false

之前自己对数据类型这一块没有整体的理解,无论是什么编程语言,计算机处理数据所使用二进制01代码无法准确表示某些带小数位的十进制数据。

整数部分转换成二进制是“除二取余”法。
小数部分转换成二进制是"乘二取整"法。
(0.65)10 = (0.101001100110011001100110011001100110011......)2

即二进制代码在现有精度(float - 32位,double - 64位)无法正确表示0.65这个数据。

想要避免这样的问题,可以采用以下一些方式规避:

  • 将数据乘以10或者100变成整数,做完整数运算再除以10或者100
let num_1 = 0.8;
let num_2 = 0.2;
console.log((num_1 * 10 - num_2 * 10) / 10 === 0.6 ); //true

或者利用数学函数,四舍五入成为整数

console.log(Math.round((num_1 - num_2) * 10) / 10);//true
  • 通过截取有效的小数位,设置指定数值精度
let num_1 = 0.8;
let num_2 = 0.2;
let result = num_1 - num_2;
console.log(result.toFixed(1) === 0.6);//true

目前可以想到的实现就这两种,如果大家还有什么好的解决实现方案可以交流!

相关文章

  • 关于JavaScrit的数值精度问题解决

    本文中采用的代码示例都为javaScript代码 最近在刷一些javaScript的相关题目,过程中一个坑爹的细节...

  • 关于Python的数值精度问题

    在Python中(其他语言中也存在这个问题,这是计算机采用二进制导致的),有时候由于二进制和十进制之间对应问题会导...

  • mysql8 数据类型 float double decimal

    float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都...

  • 雷潮教育第一期班C#课程阶段总结(1)

    1.基本数据类型 数值类型整型 int单精度浮点型 float双精度浮点型 double更高精度数值(财务) de...

  • 《Java编程思想》笔记——基础知识

    1.基本类型 高精度数值类型: BigInteger和BigDecimal是java中的高精度数值类型,由于它们是...

  • JS数值精度

    整数和浮点数 JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。所以,1与1.0是...

  • [js]数值的精度

    基础知识 js内部所有数字在计算机内存中的表示都是64位双精度浮点数 双精度浮点数表示法的副作用 使用二进制浮点数...

  • java常见的坑

    数值计算BigDecimalBigDecimal核心是精度,精度如果不匹配,结果大概率不会符合预期 初始化设置精度...

  • float&double二进制表示方式

    参考C语言中关于float、double、long double精度及数值范围理解 在C跟C++中,IEEE754...

  • TensorFlow深度学习-第四章

    本章中的内容包含: 数值类型 数值精度 数值运算 张量张量创建待优化张量 索引与切片 维度变换改变视图插入维度删除...

网友评论

      本文标题:关于JavaScrit的数值精度问题解决

      本文链接:https://www.haomeiwen.com/subject/zsvkrxtx.html