Search code examples
javascriptjqueryroundingdecimal-pointnumber-formatting

In jQuery, what's the best way of formatting a number to 2 decimal places?


This is what I have right now:

$("#number").val(parseFloat($("#number").val()).toFixed(2));

It looks messy to me. I don't think I'm chaining the functions correctly. Do I have to call it for each textbox, or can I create a separate function?


Solution

  • If you're doing this to several fields, or doing it quite often, then perhaps a plugin is the answer.
    Here's the beginnings of a jQuery plugin that formats the value of a field to two decimal places.
    It is triggered by the onchange event of the field. You may want something different.

    <script type="text/javascript">
    
        // mini jQuery plugin that formats to two decimal places
        (function($) {
            $.fn.currencyFormat = function() {
                this.each( function( i ) {
                    $(this).change( function( e ){
                        if( isNaN( parseFloat( this.value ) ) ) return;
                        this.value = parseFloat(this.value).toFixed(2);
                    });
                });
                return this; //for chaining
            }
        })( jQuery );
    
        // apply the currencyFormat behaviour to elements with 'currency' as their class
        $( function() {
            $('.currency').currencyFormat();
        });
    
    </script>   
    <input type="text" name="one" class="currency"><br>
    <input type="text" name="two" class="currency">