本文概述
- A.使用第三方库
- 自我实施
在本文中, 你将学习使用库或使用单个函数将数字转换为其单词表示形式。
A.使用第三方库要将数字转换为使用Javascript的单词, 我们将使用numberToWords包。此模块包含一些util方法, 用于将数字转换为单词, 序数单词和序数数字。
你可以在执行npm的情况下安装此模块(因为该模块已在npm上注册, 因此它也可以与Node.js完美配合):
npm install number-to-words
或者, 如果你使用凉亭:
bower install number-to-words
如果你不使用任何Java包管理器, 只需在此处下载存储库的缩小文件即可。然后, 在浏览器中, numberToWords变量将在文档中全局访问, 然后使用脚本标记在文档中包含numberToWords.min.js文件:
<
script type="text/javascript" src="http://www.srcmini.com/path/to/numberToWords.min.js">
<
/script>
如果你需要有关此项目的更多信息, 请在此处访问Github中的官方资源库。
注意该库仅转换整数, 任何浮点值将自动解析为整数。
用法
该库提供3种方法, 使你可以将整数(或字符串类型的数字)转换为单词。请记住, 如果你使用的是requireJS, 则需要使用该模块:
// If you're using Node.js or browserify (requireJS)
// require the module using:
var numberToWords = require('number-to-words');
numberToWords.toWords(13);
// =>
"thirteen"// If you're using the script in the browser
// then the global "numberToWords" variable will be accesible in the window
numberToWords.toOrdinal(1);
numberToWords.toWordsOrdinal(1);
numberToWords.toWords(1);
1.将数字转换为其缩写序数你可以使用此库轻松地将数字转换为普通数, 序数定义了一系列内容的位置, 例如第一, 第二或第三。序数用作形容词, 名词和代词。
要将数字转换为缩写序数, 请使用.toOrdinal方法:
// 1st
numberToWords.toOrdinal(1);
// 2nd
numberToWords.toOrdinal(2);
// 3rd
numberToWords.toOrdinal(3);
// 1500th
numberToWords.toOrdinal(1500);
// 1234567890th
numberToWords.toOrdinal(1234567890);
该方法返回一个字符串, 该字符串以Providen整数(或字符串)的缩写序数值为第一个参数。
2.用数字将数字转换为其序数除了使用缩写外, numberToWords还允许你使用.toWordsOrdinal方法将数字转换为单词中的序数:
// first
numberToWords.toWordsOrdinal(1);
// second
numberToWords.toWordsOrdinal(2);
// third
numberToWords.toWordsOrdinal(3);
// one thousand, five hundredth
numberToWords.toWordsOrdinal(1500);
// one billion, two hundred thirty-four million, five hundred sixty-seven thousand, eight hundred ninetieth
numberToWords.toWordsOrdinal(1234567890);
非常棒且简单, 不是吗?
3.将数字转换为单词你可以使用.toWords方法轻松地将数字转换为其单词表示形式:
// one
numberToWords.toWords(1);
// two
numberToWords.toWords(2);
// three
numberToWords.toWords(3);
// one thousand, five hundred
numberToWords.toWords(1500);
// one billion, two hundred thirty-four million, five hundred sixty-seven thousand, eight hundred ninety
numberToWords.toWords(1234567890);
重要的提示该库最多支持999999999999999(15位数字)的转换。
使用数量更大的库将不可避免地导致异常Uncaught RangeError:超出了最大调用堆栈大小, 可以轻松防止使用try / catch语句。
自我实施如果你不想使用库来实现目标, 而只想使用简单的代码段将数字转换为单词, 则可以使用以下简单函数:
/**
* Convert an integer to its words representation
*
* @author McShaman (http://stackoverflow.com/users/788657/mcshaman)
* @source http://stackoverflow.com/questions/14766951/convert-digits-into-words-with-javascript
*/
function numberToEnglish(n, custom_join_character) {var string = n.toString(), units, tens, scales, start, end, chunks, chunksLen, chunk, ints, i, word, words;
var and = custom_join_character || 'and';
/* Is number zero? */
if (parseInt(string) === 0) {
return 'zero';
}/* Array of units as words */
units = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];
/* Array of tens as words */
tens = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
/* Array of scales as words */
scales = ['', 'thousand', 'million', 'billion', 'trillion', 'quadrillion', 'quintillion', 'sextillion', 'septillion', 'octillion', 'nonillion', 'decillion', 'undecillion', 'duodecillion', 'tredecillion', 'quatttuor-decillion', 'quindecillion', 'sexdecillion', 'septen-decillion', 'octodecillion', 'novemdecillion', 'vigintillion', 'centillion'];
/* Split user arguemnt into 3 digit chunks from right to left */
start = string.length;
chunks = [];
while (start >
0) {
end = start;
chunks.push(string.slice((start = Math.max(0, start - 3)), end));
}/* Check if function has enough scale words to be able to stringify the user argument */
chunksLen = chunks.length;
if (chunksLen >
scales.length) {
return '';
}/* Stringify each integer in each chunk */
words = [];
for (i = 0;
i <
chunksLen;
i++) {chunk = parseInt(chunks[i]);
if (chunk) {/* Split chunk into array of individual integers */
ints = chunks[i].split('').reverse().map(parseFloat);
/* If tens integer is 1, i.e. 10, then add 10 to units integer */
if (ints[1] === 1) {
ints[0] += 10;
}/* Add scale word if chunk is not zero and array item exists */
if ((word = scales[i])) {
words.push(word);
}/* Add unit word if array item exists */
if ((word = units[ints[0]])) {
words.push(word);
}/* Add tens word if array item exists */
if ((word = tens[ints[1]])) {
words.push(word);
}/* Add 'and' string after units or tens integer if: */
if (ints[0] || ints[1]) {/* Chunk has a hundreds integer or chunk is the first of multiple chunks */
if (ints[2] || !i &
&
chunksLen) {
words.push(and);
}}/* Add hundreds word if array item exists */
if ((word = units[ints[2]])) {
words.push(word + ' hundred');
}}}return words.reverse().join(' ');
}
你可以轻松使用:
// one hundred and twenty three million four hundred and fifty six thousand seven hundred and eighty nine
numberToEnglish(123456789);
// Use a custom separator (like , instead of "and")
// one hundred , twenty three million four hundred , fifty six thousand seven hundred , eighty nine
numberToEnglish(123456789, ", ");
以与库相同的方式, 最多只能输入15位数字。但是, 在这种情况下, 此函数不会引发异常, 但是将以字生成的值将不正确。此外, 此实现不支持转换为序数。
【如何在JavaScript中将数字转换为单词(数字拼写)】编码愉快!
推荐阅读
- 如何在Windows中使用Python重新启动本地或网络计算机
- 如何检查数组的元素是否是JavaScript循环中的最后一个元素
- 如何将”this”上下文绑定到扩展React.Component的类中的自定义函数
- 参数对象如何在javascript中工作
- Linux(程序设计):27---iconv库(转换字符编码)
- 六mysql日志管理
- Window10用CMD修改取消administrator密码
- Linux(程序设计):26---字符集与字符编码概述(附Unicode字符集实现原理)
- 七备份恢复