首页 > 编程语言 >JavaScript——小数精度丢失问题

JavaScript——小数精度丢失问题

时间:2023-09-28 12:12:57浏览次数:37  
标签:JavaScript 丢失 toFixed 100 精度 小数

JavaScript小数进行数值运算时出现精度丢失问题
1. 原因:JavaScript 的number类型在进行运算时都先将十进制转二进制,此时,小数点后面的数字转二进制时会出现无限循环的问题。为了避免这一个情况,要舍0进1,此时就会导致精度丢失问题。
2. 如何解决:
(1)保留小数位数toFixed()

const numObj = 12345.6789;

numObj.toFixed();   // '12345':四舍五入,没有小数部分
numObj.toFixed(1); // '12345.7': 向上舍入
numObj.toFixed(6); // '12345.678900': 小数点后不够六位,用0补足位数

(2.34).toFixed(1);  // '2.3'
(2.35).toFixed(1);  // '2.4': 向上舍入
(2.55).toFixed(1);  // '2.5': 向下舍入,因为无法用浮点数精确表示
(2.449999999).toFixed; // '2.5':向上舍入,因为2.449999999的差值小于Number.EPSILON

// 注:在ES6中,Number.EPSILON表示1与大于1的最小浮点数之间的差。
// 实际上是JavaScript能够表示的最小精度。如果误差小于这个值,则认为没 
// 有意义,即不存在误差。引入这个最小精度的目的是为了浮点数的计算(浮
// 点数计算不精确)

(2)保留几位小数,就先乘以位数的倍数,然后再除(描述得不是很好;这个方法不一定有效)
比如:要保留1位小数,就乘以10,然后再除10;要保留2位小数,就乘以100,然后再除以100

// 保留2位小数
(2.67*100-1.3*100)/100

参考链接:Number.prototype.toFixed() - JavaScript | MDN (mozilla.org)
js小数运算出现的问题(精度丢失)及解决办法_js减法小数位精度丢失-CSDN博客

标签:JavaScript,丢失,toFixed,100,精度,小数
From: https://www.cnblogs.com/gamepen/p/17735217.html

相关文章

  • 无涯教程-JavaScript - CHAR函数
    描述CHAR函数返回由数字指定的字符。使用CHAR将可能从其他类型的计算机上的文件中获得的代码页码转换为字符。语法CHAR(number)争论Argument描述Required/OptionalNumber1到255之间的数字,指定所需的字符。该字符来自Windows环境的ANSI字符集。RequiredNotes如......
  • JavaScript解密日记5
    引言:在从事JAVA工作的第五个年头,突然开始对js加密js解密感兴趣。开始了探索的路程1.JavaScript基础知识:JavaScript是一种用于Web开发的脚本语言,它包括以下基础概念:变量(Variables):用于存储数据的容器,可使用var、let或const关键字声明。数据类型(DataTypes):包括数字、字符串、布......
  • 无涯教程-JavaScript - VARA函数
    描述VARA函数根据样本估算方差。除数字外,计算中还包括文本和逻辑值,如TRUE和FALSE。语法VARA(value1,[value2]...)争论Argument描述Required/Optionalvalue11to255valueargumentscorrespondingtoasampleofapopulation.RequiredValue2,...OptionalN......
  • 无涯教程-JavaScript - VAR.S函数
    描述根据样本估算方差(忽略样本中的逻辑值和文本)。语法VAR.S(number1,[number2],...)争论Argument描述Required/OptionalNumber1Thefirstnumberargumentcorrespondingtoasampleofapopulation.RequiredNumber2,...Numberarguments2to254correspon......
  • 无涯教程-JavaScript - TRIMMEAN函数
    描述TRIMMEAN函数返回数据集内部的平均值。TRIMMEAN通过从数据集的顶部和底部尾部排除一定百分比的数据点来计算平均值。当您希望从分析中排除外围数据时,可以使用此功能。语法TRIMMEAN(array,percent)争论Argument描述Required/OptionalArrayThearrayorrangeo......
  • 无涯教程-JavaScript - TREND函数
    描述TREND函数沿线性趋势返回值。(使用最小二乘法)将一条直线拟合到阵列known_y和known_x。返回指定的new_x数组沿该行的y值。语法TREND(known_y's,[known_x's],[new_x's],[const])争论Argument描述Required/OptionalKnown_y's在关系y=mx+b中,您已经知道的y值......
  • 无涯教程-JavaScript - TREND函数
    描述TREND函数沿线性趋势返回值。(使用最小二乘法)将一条直线拟合到阵列known_y和known_x。返回指定的new_x数组沿该行的y值。语法TREND(known_y's,[known_x's],[new_x's],[const])争论Argument描述Required/OptionalKnown_y's在关系y=mx+b中,您已经知道的y......
  • [译]JavaScript规范
    译自:https://github.com/airbnb/javascript类型原始值:相当于传值1.string2.number3.boolean4.null5.undefined6.varfoo=1,7.bar=foo;8.9.bar=9;10.11.console.log(foo,bar);//=>1,9复杂类型:相当于传引用1.obje......
  • JavaScript——“==”和“===”区别(双等于号和三等于号区别)
    1.==:双等于号称为等值符。当等号两边为类型相同的值时,则直接比较值是否相同;当类型不同时,会先进行类型转换,转换为相同的类型后再进行比较。类型转化规则:1)当等号两边为boolean,string,number三者中任意两者进行对比时,会优先转换为number进行比较2)当等号两......
  • JavaScript下载base64位文件
    1/**2*下载文件3**/4functiondownloadExcel(base64Data){5varmyBlob=this.base64toBlob(base64Data);6varmyUrl=URL.createObjectURL(myBlob);7varlink=document.createElement("a");8......