123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- //加法函数,用来得到精确的加法结果
- export function accAdd(arg1: any,arg2: any){
- 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
- }
- //减法函数,用来得到精确的加法结果
- //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
- //调用:accAdd(arg1,arg2)
- //返回值:arg1加上arg2的精确结果
- export function accSub(arg1: any,arg2: any){
- 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);
- }
- //乘法函数
- export function accMul(arg1:any, arg2:any){
- var t1 = 0, t2 = 0,s1 = arg1.toString(), s2 = arg2.toString(),r1,r2;
- try {t1= s1.split(".")[1].length;}catch (e) {}
- try {t2= s2.split(".")[1].length;}catch (e) {}
- r1 = Number(s1.replace(".", ""));
- r2 = Number(s2.replace(".", ""));
- return r1 * r2 / Math.pow(10, t1+t2);
- }
- // 除法
- export function accDiv(arg1:any, arg2:any) {
- var t1 = 0, t2 = 0, s1 = arg1.toString(), s2 = arg2.toString(),r1,r2;
- try {t1 = s1.split(".")[1].length;}catch (e) {}
- try {t2 = s2.split(".")[1].length;}catch (e) {}
- r1 = Number(s1.replace(".", ""));
- r2 = Number(s2.replace(".", ""));
- return (r1 / r2) * Math.pow(10, t2 - t1);
- }
- /**
- * 格式化数字
- * @param num 要格式化的数字
- * @param len 保留小数位数默认2
- * @param type 格式化方式0:四舍五入 1:进一 2:舍去 默认0
- * @return string
- */
- export function format_number(num:any,len:any,type:any) {
- len = len > 0 && len <= 20 ? len : 2;
- var result = parseFloat(num);
- num=isNaN(result)?0:result;
- var numpow=Math.pow(10,len);
- var numcheng=accMul(num,numpow);
- if(type==1){//ceil进一
- result = Math.ceil(numcheng);
- }else if(type==2){//floor舍去
- result = Math.floor(numcheng);
- }else{//round四舍五入
- result = Math.round(numcheng);
- }
- result =accDiv(result,numpow);
- var s_x = result.toString();
- var pos_decimal = s_x.indexOf('.');
- if (pos_decimal < 0) {pos_decimal = s_x.length;s_x += '.';}
- while (s_x.length <= pos_decimal + len) {s_x += '0';}
- return s_x;
- }
- export function Arabia_To_SimplifiedChinese(Num: any): any {
- for (let i = Num.length - 1; i >= 0; i--) {
- Num = Num.replace(',', '');// 替换Num中的“,”
- Num = Num.replace(' ', '');// 替换Num中的空格
- }
- // 验证输入的字符是否为数字
- if (isNaN(Num)) {
- alert('请检查小写金额是否正确');
- return;
- }
- // 字符处理完毕后开始转换,采用前后两部分分别转换(小数点为界限)
- var part = String(Num).split('.');
- // 初始化一个字符串
- var newchar = '';
- // 小数点前进行转化
- for (let i = part[0].length - 1; i >= 0; i--) {
- // 若数量超过拾亿单位,提示
- if (part[0].length > 10) {
- // alert("位数过大,无法计算");
- return '';
- }
- let tmpnewchar:string = '';
- let perchar:any = 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;
- }
- newchar = tmpnewchar + newchar;
- }
- // 替换所有无用汉字,直到没有此类无用的数字为止
- while (newchar.search('零零') != -1 || newchar.search('零亿') != -1 || newchar.search('亿万') != -1 || newchar.search('零万') != -1) {
- newchar = newchar.replace('零亿', '亿');
- newchar = newchar.replace('亿万', '亿');
- newchar = newchar.replace('零万', '万');
- newchar = newchar.replace('零零', '零');
- }
- // 替换以“一十”开头的,为“十”
- if (newchar.indexOf('一十') == 0) {
- newchar = newchar.substr(1);
- }
- // 替换以“零”结尾的,为“”
- if (newchar.lastIndexOf('零') == newchar.length - 1) {
- newchar = newchar.substr(0, newchar.length - 1);
- }
- return newchar;
- }
|