JS Code block 代码块–数字
星期一, 2023-04-17 | Author: Lee | computer, 前端 | 440 views
数字
数字位数前面补0
角度转换为弧度
弧度转换为角度
生成随机数
阿拉伯数字翻译成中文的数字
将数字转换为大写金额
生成唯一值uuid
字节大小
千分数值格式
加法函数,用来得到精确的加法结果
除法函数,用来得到精确的除法结果
乘法函数,用来得到精确的乘法结果
减法函数,用来得到精确的减法结果
/** * 给数字位数前面补0 * @param num 数字 * @param len 数字的位数 * @returns {string|*} */ function formatZero(num, len) { if(String(num).length > len) return num; return (Array(len).join(0) + num).slice(-len); } /** * 角度转换为弧度 * @param x 角度 * @return {number} */ function deg2arc(x) { return x / 180 * Math.PI; } /** * 弧度转换为角度 * @param a 弧度 * @return {number} */ function arc2deg(a) { return a * 180 / Math.PI; } /** * 生成随机数, 在区间范围内 * @param min 区间最小值 * @param max 区间最大值 * @return {null|number} */ function random (min, max) { if (arguments.length === 2) { return Math.floor(min + Math.random() * ( (max+1) - min )) }else{ return null; } } /** * 将阿拉伯数字翻译成中文的数字 */ function numberToChinese (num) { let AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"); let BB = new Array("", "十", "百", "仟", "萬", "億", "点", ""); let a = ("" + num).replace(/(^0*)/g, "").split("."), k = 0, re = ""; for(let i = a[0].length - 1; i >= 0; i--) { switch(k) { case 0: re = BB[7] + re; break; case 4: if(!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$") .test(a[0])) re = BB[4] + re; break; case 8: re = BB[5] + re; BB[7] = BB[5]; k = 0; break; } if(k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0) re = AA[0] + re; if(a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re; k++; } if(a.length > 1) // 加上小数部分(如果有小数部分) { re += BB[6]; for(let i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)]; } if(re == '一十') re = "十"; if(re.match(/^一/) && re.length == 3) re = re.replace("一", ""); return re; } /** * 将数字转换为大写金额 */ function changeToChinese (Num) { //判断如果传递进来的不是字符的话转换为字符 if(typeof Num == "number") { Num = new String(Num); }; Num = Num.replace(/,/g, "") //替换tomoney()中的“,” Num = Num.replace(/ /g, "") //替换tomoney()中的空格 Num = Num.replace(/¥/g, "") //替换掉可能出现的¥字符 if(isNaN(Num)) { //验证输入的字符是否为数字 //alert("请检查小写金额是否正确"); return ""; }; //字符处理完毕后开始转换,采用前后两部分分别转换 let part = String(Num).split("."); let newchar = ""; //小数点前进行转化 for(let i = part[0].length - 1; i >= 0; i--) { if(part[0].length > 10) { return ""; //若数量超过拾亿单位,提示 } let tmpnewchar = "" let perchar = part[0].charAt(i); switch(perchar) { case "0": tmpnewchar = "零" + tmpnewchar; break; case "1": tmpnewchar = "壹" + tmpnewchar; break; case "2": tmpnewchar = "贰" + tmpnewchar; break; case "3": tmpnewchar = "叁" + tmpnewchar; break; case "4": tmpnewchar = "肆" + tmpnewchar; break; case "5": tmpnewchar = "伍" + tmpnewchar; break; case "6": tmpnewchar = "陆" + tmpnewchar; break; case "7": tmpnewchar = "柒" + tmpnewchar; break; case "8": tmpnewchar = "捌" + tmpnewchar; break; case "9": tmpnewchar = "玖" + tmpnewchar; break; } switch(part[0].length - i - 1) { case 0: tmpnewchar = tmpnewchar + "元"; break; case 1: if(perchar != 0) tmpnewchar = tmpnewchar + "拾"; break; case 2: if(perchar != 0) tmpnewchar = tmpnewchar + "佰"; break; case 3: if(perchar != 0) tmpnewchar = tmpnewchar + "仟"; break; case 4: tmpnewchar = tmpnewchar + "万"; break; case 5: if(perchar != 0) tmpnewchar = tmpnewchar + "拾"; break; case 6: if(perchar != 0) tmpnewchar = tmpnewchar + "佰"; break; case 7: if(perchar != 0) tmpnewchar = tmpnewchar + "仟"; break; case 8: tmpnewchar = tmpnewchar + "亿"; break; case 9: tmpnewchar = tmpnewchar + "拾"; break; } let newchar = tmpnewchar + newchar; } //小数点之后进行转化 if(Num.indexOf(".") != -1) { if(part[1].length > 2) { // alert("小数点之后只能保留两位,系统将自动截断"); part[1] = part[1].substr(0, 2) } for(i = 0; i < part[1].length; i++) { tmpnewchar = "" perchar = part[1].charAt(i) switch(perchar) { case "0": tmpnewchar = "零" + tmpnewchar; break; case "1": tmpnewchar = "壹" + tmpnewchar; break; case "2": tmpnewchar = "贰" + tmpnewchar; break; case "3": tmpnewchar = "叁" + tmpnewchar; break; case "4": tmpnewchar = "肆" + tmpnewchar; break; case "5": tmpnewchar = "伍" + tmpnewchar; break; case "6": tmpnewchar = "陆" + tmpnewchar; break; case "7": tmpnewchar = "柒" + tmpnewchar; break; case "8": tmpnewchar = "捌" + tmpnewchar; break; case "9": tmpnewchar = "玖" + tmpnewchar; break; } if(i == 0) tmpnewchar = tmpnewchar + "角"; if(i == 1) tmpnewchar = tmpnewchar + "分"; newchar = newchar + tmpnewchar; } } //替换所有无用汉字 while(newchar.search("零零") != -1) newchar = newchar.replace("零零", "零"); newchar = newchar.replace("零亿", "亿"); newchar = newchar.replace("亿万", "亿"); newchar = newchar.replace("零万", "万"); newchar = newchar.replace("零元", "元"); newchar = newchar.replace("零角", ""); newchar = newchar.replace("零分", ""); if(newchar.charAt(newchar.length - 1) == "元") { newchar = newchar + "整" } return newchar; } /** * 生成唯一值uuid * @return {string} */ function uuid() { const s4 = ()=>{ return Math.floor(( 1 + Math.random()) * 0x10000).toString(16).substring(1); }; return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); } /** * @name 字节大小 * @param {number} [byte=0] 字节 */ function ByteSize(byte = 0) { if (byte === 0) return "0 B"; const unit = 1024; const sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; const i = Math.floor(Math.log(byte) / Math.log(unit)); return (byte / Math.pow(unit, i)).toPrecision(3) + " " + sizes[i]; } /** * @name 千分数值格式 * @param {number} [num=0] 数值 */ function ThousandNum(num = 0) { return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); } /** * 加法函数,用来得到精确的加法结果 * javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 * * @param {number} arg1 * @param {number} arg2 * @returns {number} arg1加上arg2的精确结果 * @example * accAdd(0.1, 0.2) * // => 0.3 */ function accAdd(arg1, arg2) { let r1, r2, m, c; try { r1 = arg1.toString().split('.')[1].length; } catch (e) { r1 = 0; } try { r2 = arg2.toString().split('.')[1].length; } catch (e) { r2 = 0; } c = Math.abs(r1 - r2); m = Math.pow(10, Math.max(r1, r2)); if (c > 0) { let cm = Math.pow(10, c); if (r1 > r2) { arg1 = Number(arg1.toString().replace('.', '')); arg2 = Number(arg2.toString().replace('.', '')) * cm; } else { arg1 = Number(arg1.toString().replace('.', '')) * cm; arg2 = Number(arg2.toString().replace('.', '')); } } else { arg1 = Number(arg1.toString().replace('.', '')); arg2 = Number(arg2.toString().replace('.', '')); } return (arg1 + arg2) / m; } /** * 除法函数,用来得到精确的除法结果 * javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 * @param {number} arg1 * @param {number} arg2 * @returns {number} arg1除以arg2的精确结果 * @example * accDiv(0.2, 0.3) * // => 0.6666666666666666 */ function accDiv(arg1, arg2) { let t1 = 0, t2 = 0, r1, r2; try { t1 = arg1.toString().split('.')[1].length; } catch (e) { console.error(e); } try { t2 = arg2.toString().split('.')[1].length; } catch (e) { console.error(e); } r1 = Number(arg1.toString().replace('.', '')); r2 = Number(arg2.toString().replace('.', '')); return (r1 / r2) * Math.pow(10, t2 - t1); } /** * 乘法函数,用来得到精确的乘法结果 * javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 * @param {number} arg1 * @param {number} arg2 * @returns {number} arg1乘以arg2的精确结果 * @example * accMul(0.222, 0.3333) * // => 0.0739926 */ function accMul(arg1, arg2) { let m = 0; let s1 = arg1.toString(); let s2 = arg2.toString(); try { s1.split('.')[1] && (m += s1.split('.')[1].length); } catch (e) { console.error(e); } try { s2.split('.')[1] && (m += s2.split('.')[1].length); } catch (e) { console.error(e); } return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m); } /** * 减法函数,用来得到精确的减法结果 * javascript的减法结果会有误差,在两个浮点数相减的时候会比较明显。这个函数返回较为精确的减法结果。 * @param {number} arg1 * @param {number} arg2 * @returns {number} arg1减去arg2的精确结果 * @example * accSub(0.3, 0.2) * // => 0.1 */ function accSub(arg1, arg2) { let 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 ((arg1 * m - arg2 * m) / m).toFixed(n); } |
文章作者: Lee
本文地址: https://www.pomelolee.com/2359.html
除非注明,Pomelo Lee文章均为原创,转载请以链接形式标明本文地址
No comments yet.
Leave a comment
Search
相关文章
热门文章
最新文章
文章分类
- ajax (10)
- algorithm-learn (3)
- Android (6)
- as (3)
- computer (85)
- Database (30)
- disucz (4)
- enterprise (1)
- erlang (2)
- flash (5)
- golang (3)
- html5 (18)
- ios (4)
- JAVA-and-J2EE (186)
- linux (143)
- mac (10)
- movie-music (11)
- pagemaker (36)
- php (50)
- spring-boot (2)
- Synology群晖 (2)
- Uncategorized (6)
- unity (1)
- webgame (15)
- wordpress (33)
- work-other (2)
- 低代码 (1)
- 体味生活 (40)
- 前端 (21)
- 大数据 (8)
- 游戏开发 (9)
- 爱上海 (19)
- 读书 (4)
- 软件 (3)