js金额格式化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
* 参数说明:
* number:要格式化的数字
* flag : 货币符号
* decimals:保留几位小数
* dec_point:小数点符号
* thousands_sep:千分位符号
* */
formatMoney: function(number,flag,decimals,dec_point,thousands_sep) {
if(!number) {
if(number == 0) {
if(flag) {
return flag + ' ' + 0;
} else {
return 0;
}
} else {
if(flag) {
return flag + ' ' + 0;
} else {
return 0;
}
}
} else {
if(decimals) {
decimals = decimals > 0 && decimals <= 20 ? decimals : 2;
} else {
decimals = 2;
}

number = (number + '').replace(/[^0-9+-Ee.]/g, '');
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return '' + Math.ceil(n * k) / k;
};

s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
var re = /(-?\d+)(\d{3})/;
while (re.test(s[0])) {
s[0] = s[0].replace(re, "$1" + sep + "$2");
}

if ((s[1] || '').length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1).join('0');
}

var returnStr = s.join(dec);
if(flag) {
returnStr = flag + " " + returnStr;
}
return returnStr;
}
}

js截取字符串

此代码为vue项目中,用来控制字符串显示问题的过滤器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*
* 参数说明:
* value:传入的字符串
* maxLength: 字符串显示的最大长度
* length:超出该值得部分用'...'
* */
ShowStr: function(value,maxLength,length) {
if(!value) {
return '';
} else if(value.length <= maxLength) {
return value;
} else {
return value.substr(0,length) + '...';
}
}

mysql中sum结果为null的处理方式

在sql中经常遇到需要求和的时候,有时候忘记判断查出来的结果时,程序再接着往后跑的时候会抛出空指针的异常,然后程序无法继续执行。
所以我们求和时,如果没有值可以赋0.因此用到ifnull()这个函数。

1
ifnull(sum(字段A),0)

样式覆盖的问题

前端框架有时会导致自己写的的样式被覆盖掉,这时需要在写的样式后面加!important即可.
官方表述的CSS样式优先级如下:

1
通用选择器(*) < 元素(类型)选择器 < 类选择器 < 属性选择器 < 伪类 < ID 选择器 < 内联样式

!important是CSS1就定义的语法,作用是提高指定样式规则的应用优先权,添加!important即优先级最高

js中Number精度问题

在项目里遇到一个问题,就是利用ajax回传一个BigInteger类型的数值,将此值取出时,发现数值不对。

1
2
3
4
5
// 在浏览器控制台上打印一个从后台传过来的BigInteger类型的数值
console.log(21824591533692098101)

// 显示如下
21824591533692097000

原因:
由于JavaScript中Number类型的自身原因,并不能完全表示BigInteger型的数字,在BigInteger长度大于17位时会出现精度丢失的问题。

解决方法:
1.后台转成String类型传到前台
2.让前端支持Long类型

js中两个集合求并集,交集,差集

现有两个数组a = [1, 2, 3],b = [2, 4, 5],求a,b数组的并集,交集和差集。代码如下

1
2
3
4
5
6
// 并集
let union = a.concat(b.filter(v => !a.includes(v))) // [1,2,3,4,5]
// 交集
let intersection = a.filter(v => b.includes(v)) // [2]
// 差集
let difference = a.concat(b).filter(v => a.includes(v) && !b.includes(v)) // [1,3]

jquery判断输入框的值所占的字节

判断输入框的值所占的字节

Oracle中字符集为UTF-8时,一个汉字占3个字节,因此有时候需要限制栏位长度,防止存储数据报异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function getByteLen() {
var value = $("#id").val();
var len = 0;
for (var i = 0; i < value.length; i++) {
var a = value.charAt(i);
// 中文为3个字节,其余字符占2个字节
if (a.match(/[^\x00-\xff]/ig) != null) {
len += 3;
}
else {
len += 2;
}
}
return len;
}

jquery自定义验证

jquery添加自定义验证

首先写个自定义验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 当return false则出现提示信息
$.validator.addMethod("checkNumber", function(value, element) {

// 若无输入,不验证
if(value == ""){
return true;
}

// 验证规则
var v_regex=/^[0-9]+.?[0-9]*$/;

if(value){
if(!v_regex.test(value)){

return false;
}else{
return true;
}
}else{
return null;
}

}, "金額需為數字");

more >>

java8的简单用法

以下为java8的一些基本用法

1.按条件过滤集合(filter):

1
List<Employee> list = employeeList.stream().filter(e -> e.getAge() < 30 && "A1".equal(e.getDept())).collect(Collectors.toList());

2.取集合中某个属性作为新的集合(map):

1
List<String> deptList = employeeList.stream().map(Employee::getDept).collect(Collectors.toList());

3.去重(distinct):

1
2
// 第一个distinct()是把相同对象先去重,第二个distinct()是把取得的值去重
List<String> deptList = employeeList.stream().distinct().map(Employee::getDept).distinct().collect(Collectors.toList());

more >>

js中toFixed的精度问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 解决不同浏览器对toFixed进行四舍五入會造成精度問題
Number.prototype.toFixed = function (n) {
if (n > 20 || n < 0) {
throw new RangeError('toFixed() digits argument must be between 0 and 20');
}

const number = this;
if (isNaN(number) || number >= Math.pow(10, 21)) {
return number.toString();
}
if (typeof (n) == 'undefined' || n == 0) {
return (Math.round(number)).toString();
}

var result = number.toString();
const arr = result.split('.');

// 整数的情况
if (arr.length < 2) {
result += '.';
for (let i = 0; i < n; i += 1) {
result += '0';
}
return result;
}

const integer = arr[0];
const decimal = arr[1];
if (decimal.length == n) {
return result;
}
if (decimal.length < n) {
for (let i = 0; i < n - decimal.length; i += 1) {
result += '0';
}
return result;
}
result = integer + '.' + decimal.substr(0, n);
const last = decimal.substr(n, 1);

// 四舍五入,转换为整数再处理,避免浮点数精度的损失
if (parseInt(last, 10) >= 5) {
const x = Math.pow(10, n);
result = (Math.round((parseFloat(result) * x)) + 1) / x;
result = result.toFixed(n);
}

return result;
}