多个定时任务
。
给他一个容差的区间,比如你这里是要求提前10分钟,你就定义两个定时任务。
一个 9 分钟一次①,一个 2 分钟一次。②
当 ① 运行时,遇到即将需要触发的,比如在 15 分钟以内的,就放到第二组队列去。
由第 ② 个定时任务去从这一组队列中查找,并执行。
点击阅读全文
没有足够的数据
锦峰将将 赞了回答 · 2019-07-26
多个定时任务
。
给他一个容差的区间,比如你这里是要求提前10分钟,你就定义两个定时任务。
一个 9 分钟一次①,一个 2 分钟一次。②
当 ① 运行时,遇到即将需要触发的,比如在 15 分钟以内的,就放到第二组队列去。
由第 ② 个定时任务去从这一组队列中查找,并执行。
多个定时任务。给他一个容差的区间,比如你这里是要求提前10分钟,你就定义两个定时任务。一个 9 分钟一次①,一个 2 分钟一次。②当 ① 运行时,遇到即将需要触发的,比如在 15 分钟以内的,就放到第二组队列去。由第 ② 个定时任务去从这一组队列中查找,并执行。
关注 4 回答 3
锦峰将将 赞了回答 · 2019-07-26
多个定时任务
。
给他一个容差的区间,比如你这里是要求提前10分钟,你就定义两个定时任务。
一个 9 分钟一次①,一个 2 分钟一次。②
当 ① 运行时,遇到即将需要触发的,比如在 15 分钟以内的,就放到第二组队列去。
由第 ② 个定时任务去从这一组队列中查找,并执行。
多个定时任务。给他一个容差的区间,比如你这里是要求提前10分钟,你就定义两个定时任务。一个 9 分钟一次①,一个 2 分钟一次。②当 ① 运行时,遇到即将需要触发的,比如在 15 分钟以内的,就放到第二组队列去。由第 ② 个定时任务去从这一组队列中查找,并执行。
关注 4 回答 3
锦峰将将 赞了回答 · 2019-07-26
多个定时任务
。
给他一个容差的区间,比如你这里是要求提前10分钟,你就定义两个定时任务。
一个 9 分钟一次①,一个 2 分钟一次。②
当 ① 运行时,遇到即将需要触发的,比如在 15 分钟以内的,就放到第二组队列去。
由第 ② 个定时任务去从这一组队列中查找,并执行。
多个定时任务。给他一个容差的区间,比如你这里是要求提前10分钟,你就定义两个定时任务。一个 9 分钟一次①,一个 2 分钟一次。②当 ① 运行时,遇到即将需要触发的,比如在 15 分钟以内的,就放到第二组队列去。由第 ② 个定时任务去从这一组队列中查找,并执行。
关注 4 回答 3
锦峰将将 关注了标签 · 2019-05-29
JavaScript 是一门弱类型的动态脚本语言,支持多种编程范式,包括面向对象和函数式编程,被广泛用于 Web 开发。
一般来说,完整的JavaScript包括以下几个部分:
它的基本特点如下:
JavaScript常用来完成以下任务:
JavaScript 是一门弱类型的动态脚本语言,支持多种编程范式,包括面向对象和函数式编程,被广泛用于 Web 开发。 一般来说,完整的JavaScript包括以下几个部分: ECMAScript,描述了该语言的语法和基本对象 文档对象模型(DOM),描述处理网页内容的方法和接口 浏览器...
关注 166521
锦峰将将 发布了文章 · 2019-05-29
例子:字符串124346564abcd 输出43 65 abcd
具体实现:
str = "124346564abcd"
var num = str.match(/[0-9]/g)
var letter = str.match(/[a-z,A-Z]/g);
// let numberList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let numberList = [9,8,7,6,5,4,3,2,1,0]
let letterList = ['a', 'b', 'c', 'd', 'e']
// 找到第一个数字(字母)出现的位置
function findFirst(arr,num) {
for (let index = 0; index < arr.length; index++) {
if (arr[index] == num) {
return index
}
}
}
let startIndex = 0
if (num.length > 0) {
// 在字典中的起始位置
startIndex = findFirst(numberList, num[0])
}
// 数字结果
let numArr = []
// 处理数字
let indexNum = 0
function main(arr) {
// 计数标识
let numIndex = 0
let result = ''
for (let index = startIndex; index < numberList.length; index++) {
if (numberList[index] == arr[indexNum]) {
numIndex ++
indexNum ++
result += numberList[index]
} else if (numIndex >= 2) {
numArr.push(result)
result = ''
startIndex = index
numIndex = 0
} else {
startIndex = findFirst(numberList, arr[indexNum])
result = ''
numIndex = 0
if (indexNum < arr.length) {
main(num)
}
break
}
}
}
let startIndexLetter = 0
if (letter.length > 0) {
// 在字典中的起始位置
startIndexLetter = findFirst(letterList, letter[0])
}
// 字母结果
let letterArr = []
// 处理字母
let indexLet = 0
function mainLetter(arr) {
// 计数标识
let numIndex = 0
let result = ''
for (let index = startIndexLetter; index < letterList.length; index++) {
if (letterList[index] == arr[indexLet]) {
numIndex ++
indexLet ++
result += letterList[index]
} else if (numIndex >= 2) {
letterArr.push(result)
result = ''
startIndexLetter = index
numIndex = 0
} else {
startIndexLetter = findFirst(letterList, arr[indexLet])
if (indexLet < arr.length) {
mainLetter(letter)
}
break
}
}
}
if (num && num.length>0) {
main(num)
console.log(numArr);
}
if (letter&&letter.length>0) {
mainLetter(letter)
console.log(letterArr);
}
这种方法不好,各位要是有好的方法请告知
查看原文例子:字符串124346564abcd 输出43 65 abcd 具体实现: {代码...} 这种方法不好,各位要是有好的方法请告知
赞 1 收藏 1 评论 5
锦峰将将 赞了文章 · 2019-05-10
相信绝大部分js开发者遇见过这个问题,原理很多文章都有解释,我这就不多说了,直接上解决方案的代码。
代码:
//加法
Number.prototype.add = function(arg){
var r1,r2,m;
try{r1=this.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
return (this.mul(m) + arg.mul(m)) / m;
}
//减法
Number.prototype.sub = function (arg){
return this.add(-arg);
}
//乘法
Number.prototype.mul = function (arg)
{
var m=0,s1=this.toString(),s2=arg.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.prototype.div = function (arg){
var t1=0,t2=0,r1,r2;
try{t1=this.toString().split(".")[1].length}catch(e){}
try{t2=arg.toString().split(".")[1].length}catch(e){}
with(Math){
r1=Number(this.toString().replace(".",""))
r2=Number(arg.toString().replace(".",""))
return (r1/r2)*pow(10,t2-t1);
}
}
这段代码是参考自JS 精度问题,然而这代码还有点小瑕疵,经过小修改后如上。
经过亲测是没什么问题的,大家可以自由测试下。
若该文章解决了你碰到的问题,请点个赞~哈哈
调用方法如下:
如: 0.1+0.2,2.22+0.1,2480-2479.99
0.1.add(0.2);
2.22.add(0.1);
2480.sub(2479.99);
查看原文这段代码是参考自JS 精度问题,然而这代码还有点小瑕疵,经过小修改后如上。经过亲测是没什么问题的,大家可以自由测试下。若该文章解决了你碰到的问题,请点个赞~哈哈
赞 3 收藏 6 评论 2
锦峰将将 赞了文章 · 2019-05-10
计算机世界里,数字的计算,所有语言都会丢失精度,所以没有万全之策,但在人力范围内,尽量解决。
网上找了一部分代码,发现是有问题的,比如:
//加法
Number.prototype.myAdd = function(arg2) {
var arg1 = this;
if (isNaN(arg2)) {
return 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.prototype.mySub = function(arg2) {
var arg1 = this;
if (isNaN(arg2)) {
return 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));
n = (r1 >= r2) ? r1 : r2;
return ((arg1 * m - arg2 * m) / m).toFixed(n);
}
//乘法
Number.prototype.myMul = function(arg2) {
var arg1 = this;
if (isNaN(arg2)) {
return 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.prototype.myDiv = function(arg2) {
var arg1 = this;
if (isNaN(arg2)) {
return 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).myMul(pow(10, t2 - t1))
}
}
在计算一些特殊的数字时,仍然有问题:
比如加法:
268.34.myDiv(0.83);//321.7505995203837
所以还要优化
我重新做了一版:
var operationNumber = function (arg1,arg2,operator) {
var oper=['+','-','*','/'];
// 不合法的运算
if (isNaN(arg1)||isNaN(arg2)||oper.indexOf(operator)<0) {
return NaN;
}
// 除以0
if (operator==='/'&&Number(arg2)===0) {
return Infinity;
}
// 和0相乘
if (operator==='*'&&Number(arg2)===0) {
return 0;
}
// 相等两个数字相减
if ((arg1===arg2||Number(arg1)===Number(arg2))&&operator==='-') {
return 0;
}
var r1, r2, max,_r1,_r2;
try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
max = Math.max(r1, r2)
_r1 = max-r1;
_r2 = max-r2;
if (_r1!==0) {
arg1=arg1+'0'.repeat(_r1)
}
if (_r2!==0) {
arg2=arg2+'0'.repeat(_r2)
}
arg1 = Number(arg1.toString().replace('.',''))
arg2 = Number(arg2.toString().replace('.',''))
var r3 = operator==='*'?(max*2):(operator==='/'?0:max);
var newNum = eval(arg1+operator+arg2);
if (r3!==0) {
var nStr = newNum.toString();
nStr = nStr.replace(/^-/,'');
if (nStr.length<r3+1) {
nStr = '0'.repeat(r3+1-nStr.length)+nStr;
}
nStr = nStr.replace(new RegExp('(\\\d{'+r3+'})$'),'.$1');
if (newNum<0) {
nStr = '-'+nStr;
}
newNum = nStr*1;
}
return newNum;
}
//加法
Number.prototype.myAdd = function(arg2) {
return operationNumber(this,arg2,'+');
}
//减法
Number.prototype.mySub = function(arg2) {
return operationNumber(this,arg2,'-');
}
//乘法
Number.prototype.myMul = function(arg2) {
return operationNumber(this,arg2,'*');
}
// 除法
Number.prototype.myDiv = function(arg2) {
return operationNumber(this,arg2,'/');
}
如果你发现了bug,评论区及时反馈,我及时跟进修复
查看原文计算机世界里,数字的计算,所有语言都会丢失精度,所以没有万全之策,但在人力范围内,尽量解决。 网上找了一部分代码,发现是有问题的,比如: {代码...} 在计算一些特殊的数字时,仍然有问题:比如加法: {代码...} 所以还要优化 我重新做了一版: {代码...} 如果...
赞 15 收藏 11 评论 2
查看全部 个人动态 →
https://github.com/sjf1256754123/spring-boot-api-mybatis-plus
注册于 2017-10-06
个人主页被 1.3k 人浏览
推荐关注