forked from kong0107/chinese-parseint
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchinese-parseint.js
executable file
·81 lines (74 loc) · 2.38 KB
/
chinese-parseint.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
var chinese_parseInt = (function(){
var chars = {
"0": 0, "零": 0, "○": 0, "〇": 0, "洞": 0,
"1": 1, "一": 1, "壹": 1, "ㄧ": 1, "弌": 1, "么": 1,
"2": 2, "二": 2, "貳": 2, "贰": 2, "弍": 2, "兩": 2, "两": 2,
"3": 3, "三": 3, "參": 3, "叁": 3, "弎": 3, "参": 3, "叄": 3,
"4": 4, "四": 4, "肆": 4, "䦉": 4,
"5": 5, "五": 5, "伍": 5,
"6": 6, "六": 6, "陸": 6,
"7": 7, "七": 7, "柒": 7,
"8": 8, "八": 8, "捌": 8,
"9": 9, "九": 9, "玖": 9,
"十": 10, "拾": 10,
"百": 100, "佰": 100,
"千": 1000, "仟": 1000,
"廿": 20,
"卅": 30, "卌": 40, "皕": 200,
"萬": 1e+4, "万": 1e+4,
"億": 1e+8, "亿": 1e+8
};
var main = function(str, radix) {
var result = parseInt(str, radix);
if(!isNaN(result)) return result;
if(typeof str !== "string") return NaN;
str = str.replace(/[\s ]+/g, "");
var negative = /^[負负-]/.test(str);
if(negative) str = str.substr(1);
result = 0;
var partialSum = 0; ///< 不到一萬的部分
var digit = -1; ///< 個位數,預設為 -1 以區分有無"零"的出現
for(var i = 0; i < str.length; ++i) {
var charVal = chars[str.charAt(i)]; ///< 暫存字元代表的數值
if(charVal === undefined) return NaN; // 有任何不認得的字,直接 NaN
if(charVal < 10) {
digit = (digit == -1)
? charVal
: digit * 10 + charVal // ex. 零五、二五六萬
;
}
else if(charVal < 1e+4) {
if(digit == -1) digit = 1;
if(i > 1 && digit == 0 && chars[str.charAt(i-2)] != 100)
digit = 1; // 處理"一千零十一";搜尋"千零十"的確是出現過的。
partialSum += digit * charVal;
digit = -1;
}
else {
if(digit != -1) partialSum += digit;
if(i && chars[str.charAt(i-1)] >= 1e+4) // 為了"四萬萬五千萬"
result *= chars[str.charAt(i)];
else result += partialSum * charVal;
partialSum = 0;
digit = -1;
}
}
if(digit > 0) {
if(str.length > 1) { // 為了處理"二十四萬二"、"二百五"等
charVal = chars[str.charAt(str.length - 2)];
if(charVal < 100) partialSum += digit;
else {
charVal /= charVal.toString().charAt(0); // 把「皕」轉成100
partialSum += digit * (charVal / 10);
}
}
else partialSum += digit;
}
result += partialSum;
if(negative) result *= -1;
return result;
};
main.characters = chars;
return main;
})();
if(typeof module === 'object') module.exports = chinese_parseInt;