我有一個項目要求我將數字轉換爲單詞,但關鍵是要將數字轉換爲23,而不是二十三。我發現this script這很好,除了它不會連字。什麼是最好的方式來完成我想要做的事情?在Javascript中將數字轉換爲帶有連字的單詞
編輯
它需要轉換數字,如:142至一百四十二個,不是一百四十兩個或一個一百四十二個
我有一個項目要求我將數字轉換爲單詞,但關鍵是要將數字轉換爲23,而不是二十三。我發現this script這很好,除了它不會連字。什麼是最好的方式來完成我想要做的事情?在Javascript中將數字轉換爲帶有連字的單詞
編輯
它需要轉換數字,如:142至一百四十二個,不是一百四十兩個或一個一百四十二個
有一羣很好的答案,但沒有人去了超過4或5位......這是我落得這樣做,讓我完成項目。
var th = ['', 'thousand', 'million', 'billion', 'trillion'];
var dg = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
var tn = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];
var tw = ['twenty-', 'thirty-', 'forty-', 'fifty-', 'sixty-', 'seventy-', 'eighty-', 'ninety-'];
function toWords(s) {
s = s.toString();
s = s.replace(/[\, ]/g, '');
if (s != parseFloat(s)) return 'not a number';
var x = s.indexOf('.');
if (x == -1) x = s.length;
if (x > 15) return 'too big';
var n = s.split('');
var str = '';
var sk = 0;
for (var i = 0; i < x; i++) {
if ((x - i) % 3 == 2) {
if (n[i] == '1') {
str += tn[Number(n[i + 1])] + ' ';
i++;
sk = 1;
} else if (n[i] != 0) {
str += tw[n[i] - 2] + ' ';
sk = 1;
}
} else if (n[i] != 0) {
str += dg[n[i]] + ' ';
if ((x - i) % 3 == 0) str += 'hundred ';
sk = 1;
}
if ((x - i) % 3 == 1) {
if (sk) str += th[(x - i - 1)/3] + ' ';
sk = 0;
}
}
if (x != s.length) {
var y = s.length;
str += 'point ';
for (var i = x + 1; i < y; i++) str += dg[n[i]] + ' ';
}
final = str.replace(/\s+/g, ' ').replace(/- /g, '-');
if (final.substring(final.length-1) == "-"){
final = final.substring(0, final.length-1);
}
return final;
}
var i;
for (i = 15; i < 25; i++) {
document.write(toWords(i) + '<br>');
}
document.write(toWords(2745635) + '<br>');
您可以使用代碼,您發現,通過空間分割結果和連字符連接回:
toWords(23).split(' ').join('-');
你可以嘗試使用lastIndexOf
和substr
功能
var num = toWords(23);
var index = num.lastIndexOf(' ');
if(index != -1) {
num = num.substr(0, index) + "-" + num.substr(index);
}
你可以看看編輯嗎? –
@CircleB請參閱更新 – isvforall
這將爲短號碼(低於20000)做的事:
number_string.replace(/ty (\S)/g,'ty-$1');
如果你可能有相同的數字「四萬零五」,不過,你必須要更加具體:
number_string.replace(/ty (one|two|three|four|five|six|seven|eight|nine)/gi,'ty-$1');
這是針對虛線數字的自定義提案。
function wordify(n) {
var word = [],
numbers = {
1: 'One',
2: 'Two',
3: 'Three',
4: 'Four',
5: 'Five',
6: 'Six',
7: 'Seven',
8: 'Eight',
9: 'Nine',
10: 'Ten',
11: 'Eleven',
12: 'Twelve',
t3: 'Thir', // -teen, -ty
t5: 'Fif',
t8: 'Eigh',
20: 'Twenty'
},
hundreds = 0 | (n % 1000)/100,
tens = 0 | (n % 100)/10,
ones = n % 10,
part;
if (n === 0) {
return 'Zero';
}
if (hundreds) {
word.push(numbers[hundreds] + ' Hundred');
}
if (tens === 0) {
word.push(numbers[ones]);
} else if (tens === 1) {
word.push(numbers['1' + ones] || (numbers['t' + ones] || numbers[ones]) + 'teen');
} else {
part = numbers[tens + '0'] || (numbers['t' + tens] || numbers[tens]) + 'ty';
word.push(numbers[ones] ? part + '-' + numbers[ones] : part);
}
return word.join(' ');
}
var i;
for (i = 0; i < 2000; i++) {
document.write(wordify(i) + '<br>');
}
這或編輯腳本你發現任何你看到他們做的東西有',替換爲「 - 」 –
@ CalebO'Leary權,這就是更好的解決方案 – madox2
會不會用連字符替換每個空間? –