2016-04-20 20 views
0

Ich habe ein Projekt, das erfordert, dass ich Zahlen in Wörter umwandelt, aber der Schlüssel ist, um Zahlen wie: 23 zu Dreiundzwanzig, nicht Dreiundzwanzig. Ich habe this script gefunden, das großartig funktioniert, außer dass es die Wörter nicht trennt. Was wäre der beste Weg, um das zu erreichen, was ich versuche?Konvertieren von Zahlen in Bindestrich in Javascript

bearbeiten

Es braucht Zahlen zu konvertieren, wie: 142 bis Hundert Zweiundvierzig, nicht hundert Forty Two oder One-Hundred-Zweiundvierzig

Antwort

0

Es gibt ein paar gute Antworten, aber keiner von ihnen über 4 oder 5 Ziffern steigen ... Hier ist, was ich mein Projekt getan tun endete zu bekommen.

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>');

1

können Sie den Code verwenden, die Sie gefunden, geteilt durch Raum das Ergebnis und kommen durch Bindestrich zurück:

toWords(23).split(' ').join('-'); 
+0

Dieses oder das Skript bearbeiten Sie und überall gefunden Sie sehen, wie sie Sachen tun mit ‚‘, ersetzen Sie mit ‚-‘ –

+0

@ CalebO'Leary Recht, eine bessere Lösung das ist – madox2

+1

nic die jeden Raum durch einen Bindestrich ersetzen? –

0

Sie können die lastIndexOf und substr Funktionen zu nutzen versuchen

var num = toWords(23); 
var index = num.lastIndexOf(' '); 

if(index != -1) { 
    num = num.substr(0, index) + "-" + num.substr(index); 
} 
+0

Können Sie sich die Änderung ansehen? –

+0

@ CircleB siehe Update – isvforall

1

Dies wird für Kurznummern tun (weniger als 20.000):

number_string.replace(/ty (\S)/g,'ty-$1'); 

Wenn Sie Zahlen haben könnte wie „vierzigtausend und fünf“, obwohl, werden Sie präziser sein:

number_string.replace(/ty (one|two|three|four|five|six|seven|eight|nine)/gi,'ty-$1'); 
1

Dies ist ein benutzerdefinierter Vorschlag für gestrichelte Zahlen.

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>'); 
 
}

Verwandte Themen