@hee-san/num_ja
Version:
Convert between number and Japanese
46 lines (38 loc) • 1.31 kB
JavaScript
module.exports = num_ja;
DIGIT = ["〇", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
UNIT1 = ["", "十", "百", "千"];
UNIT2 = ["", "万", "億", "兆", "京"];
// "垓", "𥝱", "穣", "溝", "澗", "正", "載", "極", "恒河沙", "阿僧祇", "那由他", "不可思議", "無量大数",
function num_ja(n) {
if (
typeof n !== "number" ||
isNaN(n) ||
-n < -Number.MAX_SAFE_INTEGER ||
Number.MAX_SAFE_INTEGER < n
)
throw new TypeError();
if (n == 0) return "〇";
if (n < 0) return "マイナス" + num_ja(-n);
let groupLevel = 0;
let answer = "";
while (n > 0) {
let groupNumber = n % 10000;
n = Math.floor(n / 10000);
let n0 = groupNumber % 10;
let n1 = Math.floor(((groupNumber % 100) - (groupNumber % 10)) / 10);
let n2 = Math.floor(((groupNumber % 1000) - (groupNumber % 100)) / 100);
let n3 = Math.floor((groupNumber - (groupNumber % 1000)) / 1000);
answer =
(n3 <= 1 ? "" : DIGIT[n3]) +
(n3 == 0 ? "" : UNIT1[3]) +
(n2 <= 1 ? "" : DIGIT[n2]) +
(n2 == 0 ? "" : UNIT1[2]) +
(n1 <= 1 ? "" : DIGIT[n1]) +
(n1 == 0 ? "" : UNIT1[1]) +
(n0 == 0 ? "" : DIGIT[n0]) +
(groupNumber == 0 ? "" : UNIT2[groupLevel]) +
answer;
groupLevel++;
}
return answer;
}