四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一
//保留小数点后2位,并进行四舍五入(银行家四舍五入)|places 保留位数,默认为2
function zzt1(value, places) {
places = (places || places == 0) ? places : 2;
value = value.toString();
if (value.indexOf(".") == -1) {
return value;
}
let nums = value.split(".");
let decimals = nums[1].toString();
let decimal_len = decimals.length;
if (decimal_len <= 0) {
return value;
}
let decimal_array = [];
//如果数字整数位为0,那么保留2位有效数字(0不属于有效数字)
if (nums[0] == "0") {
let strnum = 0;
for (let i = 0; i < decimal_len; i++) {
if (strnum == places) {
var residue = decimals.substr(i);
break;
}
let zui1 = decimals.substr(i, 1);
decimal_array.push(zui1); //存储小数部分
if (zui1 != 0) {
strnum++;
}
}
// 数字整数位不为1时,保留2位数字
} else {
for (let i = 0; i < decimal_len; i++) {
if (decimal_array.length == places) {
var residue = decimals.substr(i);
break;
}
let zui1 = decimals.substr(i, 1);
decimal_array.push(zui1);
}
}
//如果保留2位小数后,原数小数位还有剩余,那么进行四舍五入的判断
if (residue) {
let result = zzt2(residue);
if (places == 0) {
var end_num = nums[0].split("").pop();
} else {
var end_num = decimal_array.pop();
}
if (end_num == undefined || !end_num) {
end_num = 0;
}
if (places == 0) {
var new_str = Number(nums[0]) + (result == 3 ? ((end_num % 2 == 0) ? 0 : 1) : result);
} else {
if (result == 3) {
let jioushu = (end_num % 2 == 0) ? 0 : 1;
end_num = Number(end_num) + jioushu;
} else {
end_num = Number(end_num) + result;
}
decimal_array.push(end_num);
//将数字的数组进行处理,将大于10的进行处理
let new_decimal_array = zzt3(decimal_array, places);
let integer = new_decimal_array.pop();
new_decimal_array.reverse();
let decimal = new_decimal_array.join("");
let the_integer = Number(nums[0]) + Number(integer);
var new_str = the_integer + "." + decimal;
}
} else {
var new_str = places == 0 ? nums[0] : (nums[0] + "." + decimal_array.join(""));
}
return parseFloat(new_str);
}
//银行家四舍五入判断使用
//将字符串转换成数组处理,如果数组长度大于等于1,那么{如果数组第0位数组小于5返回0,大于5返回1,等于5{如果数组中剩余的字段中没有大于0的数字,返回3,否则返回1,如果数组没有其他的值返回3}},如果长度等于0,返回0
function zzt2(value) {
let value_array = value.split("");
let len = value_array.length;
if (len >= 1) {
if (value_array[0] < 5) {
return 0;
} else if (value_array[0] > 5) {
return 1;
} else if (value_array[0] == 5) {
let ii = 0;
if (value_array[1]) {
for (let i = 1; i < len; i++) {
if (value_array[i] > 0) {
ii = 1;
break;
}
}
} else {
return 3;
}
return ii == 0 ? 3 : 1;
}
} else if (len == 0) {
return 0;
}
}
//数组循环,对数组中的每个数进行判断,如果数字大于10,那么取尾数放到新数组,十位数赋值给j加到下一个数字上,返回新数组
function zzt3(number_array, places) {
places = places || 2;
number_array.reverse();
let new_number_array = [];
let j = 0;
let array_num = number_array.length;
for (let i = 0; i < array_num; i++) {
let new_i = Number(number_array[i]) + j;
if (new_i >= 10) {
let new_i1 = new_i.toString().split("");
new_number_array.push(new_i1[1]);
j = Number(new_i1[0]);
} else {
new_number_array.push(new_i);
j = 0;
}
}
if (places != 0) {
new_number_array.push(j);
}
return new_number_array;
}