当前位置: 首页 > Web前端 > vue.js

前端BUG记录——什么是科学计数法?

时间:2023-03-31 23:35:25 vue.js

科学计数法是一种计算数字的方法。特点:损失精度,节省空间什么是科学记数法?用a乘以10的n次方的形式表示一个数(1≤|a|<10,a不是分数,n是整数)。19971400000000==1.99714×10^13==1.99714e13当我们要标记或操作一些更大或更小的数字很多时,使用科学记数法可以避免浪费大量的空间和时间。问题起源在一个群里,有人问我:保留小数点的问题。经过一番调查,他并没有处理科学记数法。JavaScript可以准确表示的整数范围在-2^53到2^53之间(不包括两个端点)。超出这个范围,这个整数就不能准确表示了。同样,由于存储规范,小数也存在精度问题。https://www.ecma-international.org/ecma-262/#sec-ecmascript-language-types-number-typeJavaScript的数字JavaScript的数字对象是一个封装对象,可让您使用数值。Number对象是使用Number()构造函数创建的。JavaScript的Number类型是双精度IEEE75464位浮点类型。最近发布了BigInt任意精度数类型,大家已经可以尝试安全数Number.MAX_SAFE_INTEGER,JavaScript中最大的安全整数(2**53-1)。Number.MAX_VALUE可以用JavaScript表示的最大正数。最小的负数是-MAX_VALUE。Number.MIN_SAFE_INTEGERJavaScript中可表示的最小安全整数(-(253-1))。Number.MIN_VALUEJavaScript中可以表示的最小正数,即最接近0的正数(实际上不会变成0)。最大的负数是-MIN_VALUE。代码functionnumber2string(num){num=String(num)vareSplit=num.split('e')vare=+(eSplit[1]||0)varpad='0'.repeat(500)varnumSplit=eSplit[0].split('.')varstrvarnumSplit1=numSplit[1]||''if(e<0){str=('0.'+(pad+numSplit[0]).slice(e)+numSplit1)}else{str=(numSplit[0]+(numSplit1+pad)。slice(0,e)+'.'+numSplit1.slice(e))}returnstr.replace(/\.?0*$/,'').replace(/^0*/,'').replace(/^\./,'0.')||'0'}//number2string('1.23456789e-1')//number2string('1.23456789e0')//number2string('1.23456789e1')arr=[];for(vari=-20;i<20;i++){arr.push(`1.23456789e${i}`)//arr.push(`0001.23456789000e${i}`)//arr.push(`00000.0000001e${i}`)//arr.push(`${i}`)//arr.push(`${.5-Math.random()}`)}arr.forEach((v)=>{console.log(String(v).padEnd(30,''),number2string(v))})微信公众号:前端linong参考资料https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/参考/Global_Objects/编号