js小数字保留两位有效位数或者多位-防止精度丢失-保留两位有效数字
迪丽瓦拉
2025-05-29 12:17:15
0次

js小数字保留两位有效位数或者多位-防止精度丢失

前端开发在处理保留小数位数的时候遇到一个坑,保留两位有效位数,
**保留两位有效位数:**例如:1.00000567,保留成1.0000057,有效数字的两位小数(上学时候好像学过这种数字,忘了,哈哈哈)
翻了很长时间百度,没有找到直接能用的方法。。。于是自己封装了一下,记录一下,有用到的直接拿去。
先上处理方法的代码,拿去直接使用:

方法1(推荐):

/*** 适合处理小数位数特别多的情况,不会丢失精度(但是直接传入字符串的数字)* @param {*} newnum 需要转化的数字(字符串)* @param {*} bitnum 需要转化为几位有效位数* @returns 需要转化为几位有效数字*/
const ToEffectiveNum = (newnum, bitnum = 2) => {if (isNaN(newnum)) {return 0;}if (newnum === 0 || newnum === '0') {return 0;}if (typeof newnum === 'number') {newnum = newnum.toString();} if (typeof newnum === 'string') {const fast = newnum.split('.')[0]; // 拿小数点前面的内容(字符串)if (Number(fast)>0) { // 如果小数点前面的内容大于0,直接返回return Number(newnum).toFixed(2)}const last = newnum.split('.')[1]; // 拿小数点后面的内容(字符串)if (!last) return Number(newnum).toFixed(2) // 如果没有小数点后面的内容,直接返回const index1 = last.split('').findIndex(item => item !== '0') // 不是0的第一个位置索引if (index1 === -1) return Number(newnum).toFixed(2) // 如果小数点后面的内容全是0,直接返回if(index1 === 0) return Number(newnum).toFixed(2) // 说明直接保留两位即可return Number(newnum).toFixed(index1+2) // 返回结果(Number类型)}
}
console.log(ToEffectiveNum('0.0000000000011745')); // 0.0000000000012

这个处理方法不会以为传入的位数太多导致精度丢失等问题(推荐)。

方法2(比较推荐):

/**
* 可以直接数字num
* 适合处理位数不会特别多的小数
* 缺点:小数位数太多无法处理,会返回0
*/ 
const liangweiunm = function istownum(num) {const str = num.toString();const houmian = str.substring(str.indexOf('.')+1, str.length); // 拿小数点后面的内容(字符串)const zhuanshuzi = Number(houmian) // 转换成数字后会自动去掉开头的0const indexNew = houmian.indexOf(zhuanshuzi); // 拿到小数点后面的数字的位置const result = num.toFixed(indexNew+2);return result;
}
console.log('liangweiunm', liangweiunm(54456456));

方法3:

const value = 0.0000008;
(function significantNum(value, count = 1) {let newNum = count;let value1 = parseFloat(value);let newData = value1.toFixed(newNum + 1);if (value1 === 0) {return newData;}if (parseFloat(value1.toFixed(2)) === 0) {if (parseInt(value1 * Math.pow(10, newNum)) === 0) {newNum++;return significantNum(value1, newNum);} else {newData = value1.toFixed(newNum + 1);}} else {newData = value1.toFixed(2);}console.log(newData);return newData;
}
)(value)

(这个方法目前只是处理0开头的小数,,其他的没有做判断,因为做到这里发现方案不太可行,效率太低了)

运行效果就上一个截图吧。
在这里插入图片描述

写在最后

✨个人笔记博客✨

星月前端博客
http://blog.yhxweb.top/

✨原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️评论,你的意见是我进步的财富!

相关内容

热门资讯

AI做攻略、“双向奔赴”……国... 本文转自:人民网人民网记者 许维娜今年国庆假期,AI(人工智能)成了不少年轻人的“旅行搭子”。行前做...
合肥的这个“梗”, 翻篇了 社交平台的评论区,曾长期流传一句专属于合肥的黑色幽默。有人问合肥哪里好玩,本地网友半开玩笑地回复:合...
7万+旅游中高层都在的群,今天... 做旅游这行,资源卡位、渠道互通、项目落地——往往就差一个“对的机会”。我们的行业社群已聚集70,00...
一场帐篷音乐节,如何让井研从“... 帐篷音乐节现场封面新闻记者 周洪攀10月的研溪湿地,晚风里裹着柑橘的清甜与民谣的回响。夜幕降临,10...
白鹤翩翩落星愿,上海迪士尼度假... 10月9日,世界候鸟日前夕,上海迪士尼度假区星愿公园的湖风里多了一分白鹤的灵动。三座白鹤雕塑正式揭幕...
成都锦江边赏初秋枫叶飘飘 目前,成都锦江边国华街枫叶树红了。近年来,国华街附近的几条街都栽种了红枫树,是城区较集中看枫叶的点位...
GBTA:商务旅行正在复苏,但... 亚太正在成为全球商务旅行增长的重要引擎。在经历疫情后的快速反弹之后,全球商务旅行正在进入一个新的增长...
从景区焕新到节赛引流 邹城双节... 齐鲁网·闪电新闻10月9日讯 中秋、国庆“双节”假期,邹城市文化和旅游局提前谋划、周密部署,立足自身...
江山如此多娇 且看石楼今朝 金秋十月,黄河岸畔秋意盎然,丰收盛会喜迎国庆。本次石楼国庆文旅活动以“江山如此多娇,且看石楼今朝”为...
海南国庆假期接待游客475.4... 2026年国庆假期,海南接待游客475.40万人次,较2025年增长13.1%,较2024年增长15...