我有工作的Javascript代码,可以将输入的任何数字转换为等效的文本

时间:2009-06-09 21:15:01

标签: javascript jquery

例如,4被转换为“4”,33333被转换为“三十三数千三百三十三”。我正在考虑使用JQUERY而不是普通的JAVASCRIPT。

以下是完整的代码:

<script language="javascript" type="text/javascript"> 

    function NumberToTextConverter()
    {
        this.TEN = 10;
        this.HUNDRED = 100;
        this.THOUSAND = 1000;
        this.MILLION = 1000000;
        this.BILLION = 1000000000;
        this.wordList = new Array("", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "TEN", "ELEVEN", "Twelve", "Thirteen", "Fourteen", "fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen");
        this.wordList2 = [];
        this.initializeTwentys(); // this would populate the twentys

    }

    NumberToTextConverter.Convert = function(number)
    {
        var currentConverter = new NumberToTextConverter();
        return currentConverter.Convert(number);
    };

    NumberToTextConverter.prototype.Convert = function(number)
    {
        var quotient = Math.floor(number / this.BILLION);
        var remainder = number % this.BILLION;
        var word = "";
        var realValue = "";
        var converter = this;
        if (number < this.BILLION)
        {
            return converter.ConvertToMillions(number);
        }
        else
        {
            var quotientValue = quotient.toString();
            if (quotientValue.length == 3)
            {
                realValue = realValue + converter.ConvertHundreds(quotient) + " billions ";
            }
            else if (quotientValue.length == 2)
            {
                realValue = realValue + converter.ConvertToDoubleDigit(quotient) + " billions ";
            }
            else
            {
                realValue = realValue + this.wordList[quotient] + " billions ";
            }
            realValue = realValue + converter.ConvertToMillions(remainder);
        }
        return realValue;
    };
    NumberToTextConverter.prototype.ConvertToMillions = function(number)
    {
        var quotient = Math.floor(number / this.MILLION);
        var remainder = number % this.MILLION;
        var word = "";
        var realValue = "";
        var converter = this;
        if (number < this.MILLION)
        {
            return converter.ConverToThousands(number);
        }
        else
        {
            var quotientValue = quotient.toString();
            if (quotientValue.length == 3)
            {
                realValue = realValue + converter.ConvertHundreds(quotient) + " millions ";
            }
            else if (quotientValue.length == 2)
            {
                realValue = realValue + converter.ConvertToDoubleDigit(quotient) + " millions ";
            }
            else
            {
                realValue = realValue + this.wordList[quotient] + " millions ";
            }
            realValue = realValue + converter.ConverToThousands(remainder);
        }
        return realValue;
    };
    NumberToTextConverter.prototype.ConverToThousands = function(number)
    {
        var quotient = Math.floor(number / this.THOUSAND);
        var remainder = number % this.THOUSAND;
        var word = "";
        var realValue = "";
        var converter = this;
        if (number < this.THOUSAND)
        {
            return converter.ConvertHundreds(number);
        }
        else
        {
            var quotientValue = quotient.toString();
            if (quotientValue.length == 3)
            {
                realValue = realValue + converter.ConvertHundreds(quotient) + " thousands ";
            }
            else if (quotientValue.length == 2)
            {
                realValue = realValue + converter.ConvertToDoubleDigit(quotient) + " thousands ";
            }
            else
            {
                realValue = realValue + this.wordList[quotient] + " thousands ";
            }
            realValue = realValue + converter.ConvertHundreds(remainder);
        }
        return realValue;
    };

    NumberToTextConverter.prototype.ConvertHundreds = function(number)
    {
        var quotient = Math.floor(number / this.HUNDRED);
        var remainder = number % this.HUNDRED;
        var word = "";
        var converter = this;
        if (number >= 100)
        {
            return this.wordList[quotient] + " hundred " + converter.ConvertToDoubleDigit(remainder);
        }
        else
        {
         return   converter.ConvertToDoubleDigit(remainder);
        }
    };
    NumberToTextConverter.prototype.initializeTwentys = function()
    {
        this.wordList2[0] = "";
        this.wordList2[1] = "TEN";
        this.wordList2[2] = "TWENTY";
        this.wordList2[3] = "THIRTY";
        this.wordList2[4] = "FOURTY";
        this.wordList2[5] = "FIFTY";
        this.wordList2[6] = "Sixty";
        this.wordList2[7] = "Seventy";
        this.wordList2[8] = "Eighty";
        this.wordList2[9] = "Ninety";
    };
    NumberToTextConverter.prototype.ConvertSingleDigit = function(number)
    {
        return this.wordList[number];
    };
    NumberToTextConverter.prototype.ConvertToDoubleDigit = function(number)
    {
        var quotient = Math.floor(number / this.TEN);
        var remainder = number % this.TEN;
        var word = "";
        if (number > 19)
        {
            switch (quotient)
            {
                case 2: word = this.wordList2[2]; break;
                case 3: word = this.wordList2[3]; break;
                case 4: word = this.wordList2[4]; break;
                case 5: word = this.wordList2[5]; break;
                case 6: word = this.wordList2[6]; break;
                case 7: word = this.wordList2[7]; break;
                case 8: word = this.wordList2[8]; break;
                case 9: word = this.wordList2[9]; break;
            }
            return word + " " + this.wordList[remainder];
        }
        else
        {
            return this.wordList[number];
        }
    };

    function PleaseConvert()
    {

        var value = document.getElementById("txtNumberInput").value;
        var checkValue = NumberToTextConverter.Convert(parseInt(value));

        var currentSpanTag = document.getElementById("spanText");
        currentSpanTag.style.backgroundColor = '#aadd88';
        currentSpanTag.style.border = 'dotted 1px #333377';
        currentSpanTag.innerHTML = checkValue;
    }

感谢您的意见和想法!我的问题是,花时间使用JQUERY实现这个逻辑是否是个好主意?这是工作代码: http://www.coolaspdotnetcode.com/Web/JavaScriptInfoAndCode.aspx

4 个答案:

答案 0 :(得分:9)

“转换为jQuery代码”究竟是什么意思? jQuery几乎与您发布的代码无关。它不是一种不同的语言,它没有任何魔法会使Javascript与众不同。 jQuery是一个库,旨在使操作DOM元素和跨浏览器执行常见的Javascript任务变得容易。 Javascript,并且没有任何地方可以放置像这样的功能。

如果您真正的意思是“从中制作一个插件”,那么它就是5个衬垫:

$.fn.humanizeNumber = function() {
    return this.each(function() {
        $(this).html(CALLTHEFUNCTION($(this).html()));
    }
});

CALLTHEFUNCTION在哪里是你上面发布的代码的主要功能(我真的不想仔细检查它并发现它是什么)。那个插件可以让你这样做:

$('#myelement').humanizeNumber();

#myelement中的值从“123”转换为函数返回的值。

答案 1 :(得分:3)

如果它已经以这种方式完成并且它正在工作,我不明白为什么要花时间在jQuery中实现它。

除非你想学习/练习jQuery。

答案 2 :(得分:2)

如果你的代码有效,那么没有,请不要重构。为什么?因为我们在地球上没有太多时间。

答案 3 :(得分:1)

我认为更好的地方是http://refactormycode.com/

Stackoverflow更倾向于直接问答,而不是讨论。