J'ai créé un convertisseur de nombres en mots pour 0-999 et j'ai presque réussi à le faire fonctionner à part un bug.Espace manquant dans le convertisseur de mots javascript en chiffres
Dans certains nombres supérieurs à 100, il manque un espace entre la section «cent» et la section «dizaines/unités».
Par exemple 864 donne « eth canspajar ha tri ugens » où il doit y avoir un espace entre les boîtes et les pajar (cent = boîtes)
Il semble être un problème régulier, car il arrive à 164, 264, 364, etc., et des plages d'autres nombres.
Est-ce que quelqu'un avec une meilleure connaissance de Javascript ou de maths peut regarder mon code et voir s'ils peuvent apercevoir le modèle, ou une solution? Le code provient d'un convertisseur de nombres français que je n'ai pas fait et je suis relativement nouveau à Javascript, donc c'est compliqué pour moi de comprendre complètement tout ce qui est là.
Vous pouvez voir le code ci-dessous ou à http://jsfiddle.net/nickykw/tMXmj/2/
Un grand merci
function num2Letters(number) {
if (isNaN(number) || number < 0 || 999 < number) {
return 'Veuillez entrer un nombre entier compris entre 0 et 999.';
}
var units2Letters = ['', 'onen', 'dew', 'tri', 'pajar', 'pemp', 'whegh', 'seyth', 'eth', 'naw', 'deg', 'udnek', 'dowdhek', 'tredhek', 'peswardhek', 'pemthek', 'whetek', 'seytek', 'etek', 'nownsek'],
tens2Letters = ['', 'deg', 'ugens', 'warn ugens', 'dew ugens', 'ha dew ugens', 'tri ugens', 'ha tri ugens', 'pajar ugens', 'ha pajar ugens'];
twenties2Letters = ['', 'deg', 'ugens', 'warn ugens', 'dew ugens', 'ha dew ugens', 'tri ugens', 'ha tri ugens', 'pajar ugens', 'ha pajar ugens', 'pemp ugens', 'ha pemp ugens', 'whegh ugens', 'ha whegh ugens', 'seyth ugens', 'ha seyth ugens', 'eth ugens', 'hag eth ugens', 'naw ugens', 'ha naw ugens'];
hundreds2Letters = ['', 'cans', 'dew cans', 'tri hans', 'pajar cans', 'pemp cans', 'whegh cans', 'seyth cans', 'eth cans', 'naw cans'];
var units = number % 10,
tens = (number % 100 - units)/10,
twenties = (number % 200 - units)/10,
hundreds = (number % 1000 - number % 100)/100;
var unitsOut, tensOut, twentiesOut, hundredsOut;
if (number === 0) {
return 'mann';
} else {
// THE UNITS
unitsOut = units2Letters[units];
// THE TENS
if (tens === 1 && units > 0) {
tensOut = units2Letters[10 + units];
unitsOut = '';
} else if (tens === 2 && units !== 0) {
tensOut = units2Letters[units] + ' warn ' + tens2Letters[tens];
unitsOut = '';
} else if (tens === 3) {
tensOut = units2Letters[10 + units] + ' ' + tens2Letters[tens];
unitsOut = '';
} else if ((tens === 4 && units !== 0) || (tens === 6 && units !== 0) || (tens === 8 && units !== 0)) {
tensOut = units2Letters[units] + ' ha ' + tens2Letters[tens];
unitsOut = '';
} else if (tens === 5 || tens === 7 || tens === 9) {
tensOut = units2Letters[10 + units] + ' ' + tens2Letters[tens];
unitsOut = '';
} else {
tensOut = tens2Letters[tens];
}
// THE TWENTIES - used only for 120-199
if ((number >= 121 && number <= 199) && (tens === 2 || tens === 4 || tens === 8) && units > 0) {
twentiesOut = units2Letters[units] + ' ha ' + twenties2Letters[twenties];
} else if ((number >= 121 && number <= 199) && (tens === 3 || tens === 5 || tens === 7 || tens === 9)) {
twentiesOut = units2Letters[10 + units] + ' ' + twenties2Letters[twenties];
} else if ((number >= 121 && number <= 199) && (tens === 6)) {
twentiesOut = units2Letters[units] + ' hag ' + twenties2Letters[twenties];
} else {
twentiesOut = twenties2Letters[twenties];
}
// THE HUNDREDS
//if the number is x01-09 or number is x1x or number is x2x or number is x3x then add a hag/ha after the number (hag if the number is xx1 or xx8 or x20)
if ((hundreds >= 1 && tens === 0 && units >= 1) || hundreds >= 1 && tens === 1 || hundreds >= 1 && tens === 2 || hundreds >= 1 && tens === 3) {
hundredsOut = hundreds2Letters[hundreds] + (hundreds >= 1 && (units === 1 || units === 8) || hundreds >= 1 && tens === 2 && units === 0 ? ' hag ' : ' ha ');
// insert a ha for 40, 60 and 80 above 200
} else if (hundreds >= 2 && (tens === 4 || tens === 6 || tens === 8) && units === 0) {
hundredsOut = hundreds2Letters[hundreds] + ' ha ';
} else {
hundredsOut = hundreds2Letters[hundreds];
}
// GET TOTAL
if (number === 50) {
return hundredsOut + (hundredsOut && tensOut ? ' ': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut + ' <i>or</i> hanter cans';
} else if (number === 150) {
return hundredsOut + (hundredsOut && tensOut ? ' ': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut + ' <i>or</i> deg ha seyth ugens <i>or</i> onen cans ha hanter';
} else if (hundreds > 1 && tens === 5 && units === 0) {
return hundredsOut + (hundredsOut && tensOut ? ' ': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut + ' <i>or</i> ' + hundredsOut + ' ha hanter';
} else if (hundreds === 1 && (tens === 2 || tens === 3 || tens === 4 || tens === 5 || tens === 6 || tens === 7 || tens === 8 || tens === 9)) {
return twentiesOut + ' <i>or</i> ' + hundredsOut + (hundredsOut && tensOut ? '': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut;
} else {
return hundredsOut + (hundredsOut && tensOut ? '': '') + tensOut + (hundredsOut && unitsOut || tensOut && unitsOut ? '' : '') + unitsOut;
}
}
}
var userEntry;
while (userEntry = prompt('Enter a number between 0 and 999:')) {
alert(num2Letters(parseInt(userEntry, 10)));
}
Le problème d'espace semble maintenant être résolu à http://jsfiddle.net/nickykw/tMXmj/14/ – Bob
Comment puis-je modifier l'invite dans un formulaire HTML qui affiche la sortie dans un span? – Bob