javascript - 在此 INTO WORDS 转换 Javascript 中转换美分值

标签 javascript jquery

我有一个将数值转换为单词的代码。如果用户输入的金额有美分值(value),我只想在单词中添加美分。

例如。如果我有 1,000.88 的金额。单词的值(value)将是仅一千比索和八十八美分

更新: 代码被编辑以拆分整体值(value)和美分值(value)。唯一剩下的就是将美分转换为单词。

FIDDLE

var NUMBER2TEXT = {
        ones: ['', 'ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'TEN', 'ELEVEN', 'TWELVE', 'THIRTEEN', 'FOURTEEN', 'FIFTEEN', 'SIXTEEN', 'SEVENTEEN', 'EIGHTEEN', 'NINETEEN'],
        tens: ['', '', 'TWENTY', 'THIRTY', 'FOURTY', 'FIFTY', 'SIXTY', 'SEVENTY', 'EIGHTY', 'NINETY'],
        sep: ['', ' THOUSAND ', ' MILLION ', ' BILLION ', ' TRILLION ', ' QUADRILLION ', ' QUINTILLION ', ' SEXTILLION ']
        };

        (function( ones, tens, sep ) {

        var input = document.getElementById( 'totalamountpaid' ),
        output = document.getElementById('words');

        input.onkeyup = function() {
        var val = this.value,
        arr = [],
        str = '',
        i = 0;

        if ( val.length === 0 ) {
        output.textContent = 'No amount paid';
        return;  
        }

        val = val.replace(/,/g,'');
        if ( isNaN( val ) ) {
        output.textContent = 'Invalid input.';
        return;   
        }


       val = val.toString();
       var valArray = val.split('\.', 2); //splits val into two seperate integers, whole numbers and decimals, in an array.   
       val = valArray[0]; //this is the whole number
       var val2 = valArray[1]; //this should be the decimals

        if(val2 != null && val2 != ''){
        //convert the decimals here
        var str2 = 'AND TWENTY CENTS';
        }else{
        var str2 = '';
        }

        while ( val ) {
        arr.push( val % 1000 );
        val = parseInt( val / 1000, 10 );   
        }

        while ( arr.length ) {
        str = (function( a ) {
        var x = Math.floor( a / 100 ),
        y = Math.floor( a / 10 ) % 10,
        z = a % 10;

        return ( x > 0 ? ones[x] + ' HUNDRED ' : '' ) +                 
        ( y >= 2 ? tens[y] + ' ' + ones[z] : ones[10*y + z] ); 
        })( arr.shift() ) + sep[i++] + str;                     
        }



        output.textContent = str + ' ' + str2 + ' PESOS ONLY';       
        };

        })( NUMBER2TEXT.ones, NUMBER2TEXT.tens, NUMBER2TEXT.sep );

最佳答案

抱歉久等了,出于某种原因,这行代码正在攻击我的代码。

val = parseInt( val.replace(/,/g,''), 10 );

我把它改成了:

val = val.replace(/,/g,'');

这似乎具有相同的功能,同时允许我做我的事。这是代码。我使用正则表达式在 val(if 语句)中测试一个句点,然后将 val 拆分为句点前后的内容。 split 函数中的 2 应该只允许从中提取 2 个字符串,这意味着 10.20 将变为“10”和“20”,而 1.2.3 将变为“1”和“2”,并丢弃 3. 数组从 0 开始,所以 valArray[0] 是数组中的第一个字符串,valArray[1] 是第二个字符串。

val = val.toString();
var valArray = val.split('\.', 2); //splits val into two seperate integers, whole numbers and decimals, in an array.   
val = valArray[0]; //this is the whole number
var val2 = valArray[1]; //this should be the decimals

if(val2 != null && val2 != ''){
//convert the decimals here
var str2 = 'TWENTY CENTS';
}
else{
var str2 = '';
}

更新:FIDDLE

关于javascript - 在此 INTO WORDS 转换 Javascript 中转换美分值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20778401/

相关文章:

javascript - 为什么这两个更新没有反射(reflect)在 View 中?

javascript - 如何让一个div更新内容有滑动效果(类似flash的动画)?

javascript:jQuery replaceWith() 不遵守 delay()

jquery - 带有 bootstrap 和 jQuery 的垂直菜单

javascript - 将每个字符包装在 <i> 中

javascript - d3js v5 + Topojson v3 map 不呈现

javascript - ActionScript - 从用户硬盘加载视频,无需服务器

javascript - 只在第一页加载时工作,而不是在用户通过后退/前进时工作

javascript - 有没有办法将 jquery 函数包装到对象中?

jquery - 动态居中和分布水平 ul