2017-02-07 7 views
0

Ich benutze Stephen Chapmans Code auf about.com mit dem Titel "Wie man Zahlen in Wörter mit JavaScript umwandelt." Das Problem ist, ich kann nicht herausfinden, warum ein von Podio berechnetes Feld es nicht akzeptiert. Ich bekomme immer "Skript-Syntaxfehler: Ungültige Rückgabeanweisung". Ich machte eine Geige des Codes und testete die Dinge, und wenn ich das Ende return ein alert mache, zeigt es, was ich will. Was akzeptiert Podio in dieser Hinsicht nicht und welche Möglichkeiten gibt es dazu?Podio Nummer zu den Wörtern

Kontext: Ich benutze dies für automatische Vertragsgenerierung und ich würde gerne die Wörter verfügbar haben. Vielen Dank!

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']; 
 
var words = toWords(@PODIONUMBERFIELD); 
 

 
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]] + ' '; 
 
    } 
 
    return str.replace(/\s+/g, ' '); 
 
}

+0

Im Wetten Grund hat mit der Formatierung des Codes zu tun, um die Funktion zu verursachen vor der return-Anweisung zu schließen, wodurch die return-Anweisung illegal, und die Alert-Anweisung ist absolut gültig. Ich würde JSLint oder etwas ähnliches verwenden und sehen, was es sieht. Sie könnten auch JSBeautify verwenden, um ein Rendering-Problem zu beheben, das bei einigen Aspekten Ihrer Formatierung aufgetreten ist. – user1167442

Antwort

1

Alles mit Ihrem Skript in Ordnung ist, müssen Sie es nur ein wenig neu zu ordnen. Hier ist das Kopieren/Einfügen-Version, die gut für mich gearbeitet:

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]] + ' '; 
    } 
    return str.replace(/\s+/g, ' '); 
} 


var words = toWords(@Number); 
words; 
+0

Sie, mein Freund, sind ein Heiliger. Das hat wunderbar funktioniert! –