1 | if (!window._seeds_lang) window._seeds_lang = {};
|
2 |
|
3 |
|
4 |
|
5 | Math.Calc = function () {
|
6 | |
7 |
|
8 |
|
9 |
|
10 |
|
11 | function toInteger(argNum, argDigits, round) {
|
12 | var result = { times: 1, num: 0 };
|
13 | var argNumStr = argNum + '';
|
14 | if (argNumStr.indexOf('.') === -1) {
|
15 | result.num = argNum;
|
16 | return result;
|
17 | }
|
18 | var digits = isNaN(argDigits) ? argNumStr.substr(argNumStr.indexOf('.') + 1).length : argDigits;
|
19 | var times = Math.pow(10, digits);
|
20 | var num = parseInt(Math.abs(argNum) * times + (round === false ? 0 : 0.5), 10);
|
21 | var isNegative = argNum < 0;
|
22 | result.times = times;
|
23 | result.num = isNegative ? -num : num;
|
24 | return result;
|
25 | }
|
26 |
|
27 | |
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 | function operation(a, b, digits, op) {
|
36 | var o1 = toInteger(a);
|
37 | var o2 = toInteger(b);
|
38 | var n1 = o1.num;
|
39 | var n2 = o2.num;
|
40 | var t1 = o1.times;
|
41 | var t2 = o2.times;
|
42 | var max = t1 > t2 ? t1 : t2;
|
43 | var result = null;
|
44 | switch (op) {
|
45 | case 'add':
|
46 | if (t1 === t2) {
|
47 |
|
48 | result = Number(n1) + Number(n2);
|
49 | } else if (t1 > t2) {
|
50 |
|
51 | result = Number(n1) + Number(n2 * (t1 / t2));
|
52 | } else {
|
53 |
|
54 | result = Number(n1 * (t2 / t1)) + Number(n2);
|
55 | }
|
56 | result = result / max;
|
57 | break;
|
58 | case 'subtract':
|
59 | if (t1 === t2) {
|
60 | result = n1 - n2;
|
61 | } else if (t1 > t2) {
|
62 | result = n1 - n2 * (t1 / t2);
|
63 | } else {
|
64 | result = n1 * (t2 / t1) - n2;
|
65 | }
|
66 | result = result / max;
|
67 | break;
|
68 | case 'multiply':
|
69 | result = n1 * n2 / (t1 * t2);
|
70 | break;
|
71 | case 'divide':
|
72 | result = n1 / n2 * (t2 / t1);
|
73 | break;
|
74 | default:
|
75 | result = 0;
|
76 | }
|
77 | if (digits && !isNaN(digits)) {
|
78 |
|
79 | return result.toFixed(digits);
|
80 | }
|
81 | return result;
|
82 | }
|
83 |
|
84 |
|
85 | function add(a, b, digits) {
|
86 | return operation(a, b, digits, 'add');
|
87 | }
|
88 | function subtract(a, b, digits) {
|
89 | return operation(a, b, digits, 'subtract');
|
90 | }
|
91 | function multiply(a, b, digits) {
|
92 | return operation(a, b, digits, 'multiply');
|
93 | }
|
94 | function divide(a, b, digits) {
|
95 | return operation(a, b, digits, 'divide');
|
96 | }
|
97 |
|
98 | function toFixed(argNum, argDigits, fixed, round) {
|
99 | var result = toInteger(argNum, argDigits, round);
|
100 | if (fixed) return (result.num / result.times).toFixed(argDigits);
|
101 | return result.num / result.times;
|
102 | }
|
103 |
|
104 | function toThousandth(num) {
|
105 | if (!num) return '0';
|
106 | var sExpr = /^(\d+)((\.\d+)?)$/;
|
107 | var n1 = num.toString().replace(sExpr, function (s, s1, s2) {
|
108 | var reExpr = /\d{1,3}(?=(\d{3})+$)/g;
|
109 | return s1.replace(reExpr, '$&,') + s2;
|
110 | });
|
111 | return n1;
|
112 | }
|
113 |
|
114 | function correctNumber(argNumstr, options) {
|
115 | var max = options.max,
|
116 | min = options.min,
|
117 | digits = options.digits,
|
118 | maxLength = options.maxLength,
|
119 | required = options.required,
|
120 | onError = options.onError;
|
121 |
|
122 | if (argNumstr === '' || isNaN(argNumstr) || min - max >= 0) {
|
123 |
|
124 | if (required) return min ? '' + min : '0';
|
125 | return '';
|
126 | }
|
127 | var value = String(argNumstr || '');
|
128 |
|
129 | if (!isNaN(max) && value - max > 0) {
|
130 |
|
131 | if (onError) onError({ errMsg: window._seeds_lang['hint_cannot_be_greater_than'] || '不能大于' + max });
|
132 | return '' + max;
|
133 | }
|
134 |
|
135 | if (!isNaN(min) && value - min < 0) {
|
136 |
|
137 | if (onError) onError({ errMsg: window._seeds_lang['hint_cannot_be_less_than'] || '不能小于' + min });
|
138 | return '' + min;
|
139 | }
|
140 |
|
141 | if (!isNaN(digits)) {
|
142 | console.log(digits);
|
143 | if (value.indexOf('.') !== -1 && digits - 0 >= 0 && digits.toString().indexOf('.') === -1) {
|
144 | if (digits - 0 === 0) {
|
145 |
|
146 | value = value.substring(0, value.indexOf('.'));
|
147 | } else {
|
148 |
|
149 | value = value.substring(0, value.indexOf('.') + Number(digits) + 1);
|
150 | }
|
151 | }
|
152 | }
|
153 |
|
154 | if (maxLength && value && value.length > maxLength) {
|
155 | value = value.substring(0, maxLength);
|
156 | }
|
157 |
|
158 | if (value.indexOf('.') === -1) {
|
159 | return '' + Number(value);
|
160 | }
|
161 | return '' + value;
|
162 | }
|
163 |
|
164 | function correctPhone(argPhone, options) {
|
165 | var onError = options.onError;
|
166 |
|
167 | var value = argPhone;
|
168 |
|
169 | if (isNaN(value)) {
|
170 | var result = value.match(/[0-9]{1,}/);
|
171 | if (result) value = result[0];else value = '';
|
172 |
|
173 | if (onError) onError({ errMsg: window._seeds_lang['hint_must_number'] || '必须要输入数字哦' });
|
174 | }
|
175 | return value;
|
176 | }
|
177 |
|
178 | return {
|
179 | add: add,
|
180 | subtract: subtract,
|
181 | multiply: multiply,
|
182 | divide: divide,
|
183 | toFixed: toFixed,
|
184 | toThousandth: toThousandth,
|
185 | correctNumber: correctNumber,
|
186 | correctPhone: correctPhone
|
187 | };
|
188 | }(); |
\ | No newline at end of file |