将美元金额动态转换为文本以包含“美元”和“美分”字样

时间:2021-05-10 20:55:31

标签: javascript

我需要将输入字段中输入的美元金额动态转换为文本。我能找到的最接近的解决方案接近于解决我的需求,但是,我希望结果文本包含单词“Dollars”,并在句子末尾删除“point”和“Cents”。

这是初始原型和当前结果:

function amountToWords(amountInDigits){
// American Numbering System
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,' ');
  }

  return toWords(amountInDigits);

}

<input type="text" name="number" placeholder="Number OR Amount" onkeyup="word.innerHTML=amountToWords(this.value)" />

因此,如果用户在输入框中输入 $1234.56 的金额,则所需的文本输出将拼写为“一千二百三十四美元五十六美分”

有什么建议吗?

0 个答案:

没有答案