wncf's blog wncf's blog
首页
书签
  • JavaScript
  • vue
  • css
  • 收藏正则
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

wncf

编写代码并热爱生活
首页
书签
  • JavaScript
  • vue
  • css
  • 收藏正则
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • 收集常用正则
  • eslint规则收集
  • 收集常用代码
    • 常用js
      • 不定个数的开始与结束日期重叠判断
      • 按照空格和换行截取字符串进行操作
      • 小数计算丢失精度问题
  • vscode格式化
  • 收藏夹
wncf
2022-02-28
目录

收集常用代码

# 常用js

收集一些js操作,可能以后还会用到

# 不定个数的开始与结束日期重叠判断

const data =[
    {startDay:'2022-12-23',endDay:'2023-12-24'},
    {startDay:'2022-04-23',endDay:'2023-02-24'},
    {startDay:'2022-11-23',endDay:'2023-11-24'}
]
function isRepeat(data){
const okData = []
// 将所有开始时间和结束时间划分为两个数组
const start = data.map((i) => i.startDay).sort()
const end = data.map((i) => i.endDay).sort()
       for (let i = 1; i < start.length; i++) {
            if (start[i] <= end[i - 1]) {
              // 有重复
              okData.push(true)
            } else {
              // 无重复
              okData.push(false)
            }
          }
    //找到true为重复
  return okData.includes(true)
}
isRepeat(data)
//还可以进行时间的判断,只需改为'2022-12-23 10:01:32'即可

# 按照空格和换行截取字符串进行操作

const str="百度 https://baidu.com" //多个使用换行分割
 let data = str.split(/[\n]/g).filter(item => Boolean(item)) //按照换行截取并过滤虚值(例如用户意外输入的空格)
        const data2 = data.map(item => {
            if (item) {
                return {
                    name: item.split(/\s/g)[0],
                    url: item.split(/\s/g)[1]
                }
            }
        })
        // data2:[{ name:百度,url:https://baidu.com}]

# 小数计算丢失精度问题

//除法函数,用来得到精确的除法结果
        //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
        //调用:accDiv(arg1,arg2)
        //返回值:arg1除以arg2的精确结果
        function accDiv(arg1, arg2) {
            var t1 = 0, t2 = 0, r1, r2;
            try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
            try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
            with (Math) {
                r1 = Number(arg1.toString().replace(".", ""));
                r2 = Number(arg2.toString().replace(".", ""));
                return (r1 / r2) * pow(10, t2 - t1);
            }
        }
        //给Number类型增加一个div方法,调用起来更加方便。
        Number.prototype.div = function (arg) {
            return accDiv(this, arg);
        };
//乘法函数,用来得到精确的乘法结果
        //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
        //调用:accMul(arg1,arg2)
        //返回值:arg1乘以arg2的精确结果
        function accMul(arg1, arg2) {
            var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
            try { m += s1.split(".")[1].length } catch (e) { }
            try { m += s2.split(".")[1].length } catch (e) { }
            return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
        }
        //给Number类型增加一个mul方法,调用起来更加方便。
        Number.prototype.mul = function (arg) {
            return accMul(arg, this);
        };
//加法函数,用来得到精确的加法结果
        //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
        //调用:accAdd(arg1,arg2)
        //返回值:arg1加上arg2的精确结果
        function accAdd(arg1, arg2) {
            var r1, r2, m;
            try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
            try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
            m = Math.pow(10, Math.max(r1, r2));
            return (arg1 * m + arg2 * m) / m;
        }
        //给Number类型增加一个add方法,调用起来更加方便。
        Number.prototype.add = function (arg) {
            return accAdd(arg, this);
        }
        //减法函数
        function accSub(arg1, arg2) {
            var r1, r2, m, n;
            try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
            try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
            m = Math.pow(10, Math.max(r1, r2));
            //last modify by deeka
            //动态控制精度长度
            n = (r1 >= r2) ? r1 : r2;
            return ((arg2 * m - arg1 * m) / m).toFixed(n);
        }
        ///给number类增加一个sub方法,调用起来更加方便
        Number.prototype.sub = function (arg) {
            return accSub(arg, this);
        }

转载自:js浮点运算bug的解决办法 - 飞得更高 - 博客园 (cnblogs.com) (opens new window)

编辑 (opens new window)
上次更新: 2022/05/28, 10:34:23
eslint规则收集
vscode格式化

← eslint规则收集 vscode格式化→

最近更新
01
腾讯云宝塔自动化部署方案
03-22
02
vscode格式化
12-11
03
github使用问题与解决方案
09-16
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Wncf | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式