都没达到我的预期。
解决问题
精度计算的时候我们通常会使用 .toFixed()
方法,Number.toFixed(digits)
方法使用定点表示法来格式化一个数,会对结果进行四舍五入。参数 digits
表示小数点后数字的个数,一般介于 0 到 20 (包括)之间。例如:
JavaScript 代码:
3.3e-7.toFixed(8); // “0.00000033”
3e-7.toFixed(8); // “0.00000030”
一般情况下,我们的需求小数位数是固定的,所以这个基本可以满足我们的需求。但是有些人可能不喜欢 0.00000030
这种形式,认为最后的 0
是多余的。所以索性就改进了一下:
JavaScript 代码:
function toNumberStr(num,digits) {
// 正则匹配小数科学记数法
if (/^(\d+(?:.\d+)?)(e)([-]?\d+)$/.test(num)) {
// 正则匹配小数点最末尾的0
var temp=/^(\d{1,}(?:,\d{3}).(?:0[1-9]+)?)(0*)?$/.exec(num.toFixed(digits)) ;
if(temp){
return temp[1];
}else{
return num.toFixed(digits)
}
}else{
return “”+num
}
}
toNumberStr(3.3e-7,8) // “0.00000033”
toNumberStr(3e-7,8) // “0.0000003”
toNumberStr(1.401e10,8) // “14010000000”
toNumberStr(0.0004,8) // “0.0004”
这个方法基本满足了我的需求,但是总是觉得一点累赘,后面那个参数意思也不够明确,所以发到微信群请大家帮忙优化。特别感谢网友 @caikan 提供的方法:
JavaScript 代码:
function toNonExponential(num) {
var m = num.toExponential().match(/\d(?:.(\d*))?e([±]\d+)/);
return num.toFixed(Math.max(0, (m[1] || ‘’).length - m[2]));
}
toNonExponential(3.3e-7) // “0.00000033”
toNonExponential(3e-7) // “0.0000003”
toNonExponential(1.401e10) // “14010000000”
toNonExponential(0.0004) // “0.0004”
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
结尾
学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。