import {StringUtil} from './StringUtil'; //========================================================== // 整型对象的工具类。 // // @reference // @author maocy // @version 141229 //========================================================== export class IntegerUtil { //.......................................................... // @define static Chars: string = '0123456789-%'; static NUMBER: string = '0123456789-%'; static LEFT_CHAR: string = '0'; static MAX_UINT16: number = 65535; static MAX_UINT32: number = 4294967295; //========================================================== // 检验传入值是否是整型值。 // // @method // @param v:value:String 待检验的字符串 // @return Boolean 是否整数 //========================================================== public static isInt(v) { return StringUtil.isPattern(v, 'n'); } //========================================================== // 获取非空内容。 // // @method // @param value:Integer 数字 // @param defaultValue:Integer 默认内容 // @return Integer 非空内容 //========================================================== public static nvl(value: any, defaultValue?: any) { if (value != null) { return parseInt(value); } if (defaultValue != null) { return defaultValue; } return 0; } //============================================================ // 计算一个整数的字节宽。 // // @param value 整数 // @return 字节宽 //============================================================ public static strideByte(value) { if (value > 65535) { return 4; } else if (value > 255) { return 2; } else { return 1; } } //============================================================ // 计算一个整数的位宽。 // // @param value 整数 // @return 位宽 //============================================================ public static strideBit(value) { if (value > 65535) { return 32; } else if (value > 255) { return 16; } else { return 8; } } //========================================================== // 将传入值转换为整型值。 // // @method // @param value:value:String 待转换的字符串 // @return int 转换后的整型值 //========================================================== public static parse(v: string, d: number = 0) { // 设置默认值 if (d == null) { d = 0; } // 判断内容为空 if (v == null) { return d; } if (v == '') { return d; } // 去掉两边不可见字符 v = StringUtil.trim(v.toString()); // 去掉左边0字符 while (true) { if (v.charAt(0) != '0') { break; } v = v.substr(1); } // 变换类型 var r = (v.length > 0) ? parseInt(v) : d; return isNaN(r) ? d : r; } //========================================================== // 格式化数字。 // // @param value 数字 // @param length 格式化长度 // @param pad 补足字符串 // @return 格式化内容 //========================================================== public static format(value: number, length: number, pad?: string): string { if (!pad) { pad = this.LEFT_CHAR; } var source = value.toString(); var count = length - source.length; for (var i = 0; i < count; i++) { source = pad + value; } return source; } //========================================================== // 返回范围内的数字化。 // // @method // @param value:Integer 数字 // @param min:Integer 最小数字 // @param max:Integer 最大数字 // @return Integer 数字 //========================================================== public static toRange(value, min, max) { if (value == null) { value = 0; } if (isNaN(value)) { value = 0; } if (value < min) { value = min; } if (value > max) { value = max; } return value; } //========================================================== // 计算最接近2的指数的数字。 // // @method // @param value:Integer 数字 // @return Integer 数字 //========================================================== public static pow2(value) { if (value > 4096) { return 8192; } else if (value > 2048) { return 4096; } else if (value > 1024) { return 2048; } else if (value > 512) { return 1024; } else if (value > 256) { return 512; } else if (value > 128) { return 256; } else if (value > 64) { return 128; } else if (value > 32) { return 64; } else if (value > 16) { return 32; } else if (value > 8) { return 16; } else if (value > 4) { return 8; } else if (value > 2) { return 4; } else if (value > 1) { return 2; } return 1; } //========================================================== // 计算参数集合的和。 // // @method // @param a:arguments:Object[] 参数集合 // @return Integer 合计数字 //========================================================== public static sum() { var r = 0; var a = arguments; var c = a.length; for (var n = 0; n < c; n++) { if (a[n] != null) { r += parseInt(a[n]); } } return r; } //========================================================== // 把两个字符串进行算术运算。 // // @method // @param f:function:String 方法 // @param a:value1:String 参数1 // @param b:value2:String 参数2 // @return String 计算内容 //========================================================== public static calculate(f, a, b) { a = this.parse(a); b = this.parse(b); var r = 0; if (f == '+') { r = a + b; } else if (f == '-') { r = a - b; } else if (f == 'x') { r = a * b; } else if (f == '/') { r = a / b; } return r.toString(); } //=========================================================== // 复制整数数组。 // // @method // @param po:outputData:Array 输出数据 // @param poi:outputIndex:Integer 输出位置 // @param pi:inputData:Array 输入数据 // @param pii:inputIndex:Integer 输入位置 // @param pc:count:Integer 总数 //=========================================================== public static copy(po, poi, pi, pii, pc) { for (var i = 0; i < pc; i++) { po[poi++] = pi[pii++]; } } //========================================================== // 把布尔值转化为字符串。 // // @method // @param p:value:Integer 数值 // @return String 字符串 //========================================================== public static toString(p) { return (p == null) ? '0' : p.toString(); } }