Javascript - 阿拉伯数字转汉字
Javascript - Convert Arabic Numerals to Chinese Characters
我正在尝试将数字(1、2、3...)转换为汉字(一、二/二、三...)。在中文中,数字写成[百][100][十][10][个]。例如,243 将写为 2[100]4[10]3 或三百四十三。有没有办法有效地做到这一点,还是我必须创建一个遍历每个数字并按数组转换它的函数?
谢谢!
您只需要两个数组,一个用于每个数字的名称,另一个用于数字中数字位置的名称。像
var digits = [ 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine' ]
var positions = [ 'ones', 'tens', 'hundreds' ];
toWords = num => String(243).split('').reduce((acc, curr, index) => {
console.log(parseInt(curr))
acc += digits[parseInt(curr)] + positions.reverse()[index]
return acc
}, "")
console.log(toWords(243))
如果你把英文单词当成汉字,你会得到想要的结果
你可以看看Number.prototype.toLocaleString Using locales
console.log(123456.789.toLocaleString('zh-u-nu-hanidec' )) // "一二三,四五六.七八九"
console.log(123456.789.toLocaleString('zh-u-nu-FullWide')) // "123,456.789"
我测试所有答案。我发现没有人是对的。所以我写了一个函数 myself.Here 是我的代码。
function toChineseNumber(n) {
if (!Number.isInteger(n) && n < 0) {
throw Error('请输入自然数');
}
const digits = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
const positions = ['', '十', '百', '千', '万', '十万', '百万', '千万', '亿', '十亿', '百亿', '千亿'];
const charArray = String(n).split('');
let result = '';
let prevIsZero = false;
//处理0 deal zero
for (let i = 0; i < charArray.length; i++) {
const ch = charArray[i];
if (ch !== '0' && !prevIsZero) {
result += digits[parseInt(ch)] + positions[charArray.length - i - 1];
} else if (ch === '0') {
prevIsZero = true;
} else if (ch !== '0' && prevIsZero) {
result += '零' + digits[parseInt(ch)] + positions[charArray.length - i - 1];
}
}
//处理十 deal ten
if (n < 100) {
result = result.replace('一十', '十');
}
return result;
}
console.log(toChineseNumber(123));
你可以试试这个包:chinese-numbering
const cn = window.ChineseNumbering;
console.log("11 => " + cn.numberToChinese(11));
console.log("11.5 => " + cn.numberToChinese(11.5));
console.log("-3.1415 => " + cn.numberToChinese(-3.1415));
console.log("繁体: 10000 => " + cn.numberToChinese(10000, 't'));
<script src="https://unpkg.com/chinese-numbering@1.x/bundle/iife.js"></script>
我正在尝试将数字(1、2、3...)转换为汉字(一、二/二、三...)。在中文中,数字写成[百][100][十][10][个]。例如,243 将写为 2[100]4[10]3 或三百四十三。有没有办法有效地做到这一点,还是我必须创建一个遍历每个数字并按数组转换它的函数?
谢谢!
您只需要两个数组,一个用于每个数字的名称,另一个用于数字中数字位置的名称。像
var digits = [ 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine' ]
var positions = [ 'ones', 'tens', 'hundreds' ];
toWords = num => String(243).split('').reduce((acc, curr, index) => {
console.log(parseInt(curr))
acc += digits[parseInt(curr)] + positions.reverse()[index]
return acc
}, "")
console.log(toWords(243))
如果你把英文单词当成汉字,你会得到想要的结果
你可以看看Number.prototype.toLocaleString Using locales
console.log(123456.789.toLocaleString('zh-u-nu-hanidec' )) // "一二三,四五六.七八九"
console.log(123456.789.toLocaleString('zh-u-nu-FullWide')) // "123,456.789"
我测试所有答案。我发现没有人是对的。所以我写了一个函数 myself.Here 是我的代码。
function toChineseNumber(n) {
if (!Number.isInteger(n) && n < 0) {
throw Error('请输入自然数');
}
const digits = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
const positions = ['', '十', '百', '千', '万', '十万', '百万', '千万', '亿', '十亿', '百亿', '千亿'];
const charArray = String(n).split('');
let result = '';
let prevIsZero = false;
//处理0 deal zero
for (let i = 0; i < charArray.length; i++) {
const ch = charArray[i];
if (ch !== '0' && !prevIsZero) {
result += digits[parseInt(ch)] + positions[charArray.length - i - 1];
} else if (ch === '0') {
prevIsZero = true;
} else if (ch !== '0' && prevIsZero) {
result += '零' + digits[parseInt(ch)] + positions[charArray.length - i - 1];
}
}
//处理十 deal ten
if (n < 100) {
result = result.replace('一十', '十');
}
return result;
}
console.log(toChineseNumber(123));
你可以试试这个包:chinese-numbering
const cn = window.ChineseNumbering;
console.log("11 => " + cn.numberToChinese(11));
console.log("11.5 => " + cn.numberToChinese(11.5));
console.log("-3.1415 => " + cn.numberToChinese(-3.1415));
console.log("繁体: 10000 => " + cn.numberToChinese(10000, 't'));
<script src="https://unpkg.com/chinese-numbering@1.x/bundle/iife.js"></script>