HTML5 Number Input - Always show 2 decimal places

后端 未结 15 2044
太阳男子
太阳男子 2020-11-28 05:43

Is there\'s any way to format an input[type=\'number\'] value to always show 2 decimal places?

Example: I want to see 0.00 instead of

相关标签:
15条回答
  • 2020-11-28 06:39

    ui-number-mask for angular, https://github.com/assisrafael/angular-input-masks

    only this:

    <input ui-number-mask ng-model="valores.irrf" />
    

    If you put value one by one....

    need: 120,01
    

    digit per digit

     = 0,01
     = 0,12
     = 1,20
     = 12,00
     = 120,01 final number.
    
    0 讨论(0)
  • 2020-11-28 06:41

    I know this is an old question, but it seems to me that none of these answers seem to answer the question being asked so hopefully this will help someone in the future.

    Yes you can always show 2 decimal places, but unfortunately it can't be done with the element attributes alone, you have to use JavaScript.

    I should point out this isn't ideal for large numbers as it will always force the trailing zeros, so the user will have to move the cursor back instead of deleting characters to set a value greater than 9.99

    //Use keyup to capture user input & mouse up to catch when user is changing the value with the arrows
        $('.trailing-decimal-input').on('keyup mouseup', function (e) {
    
            // on keyup check for backspace & delete, to allow user to clear the input as required
            var key = e.keyCode || e.charCode;
            if (key == 8 || key == 46) {
                return false;
            };
    
            // get the current input value
            let correctValue = $(this).val().toString();
    
             //if there is no decimal places add trailing zeros
            if (correctValue.indexOf('.') === -1) {
                correctValue += '.00';
            }
    
            else {
    
                //if there is only one number after the decimal add a trailing zero
                if (correctValue.toString().split(".")[1].length === 1) {
                    correctValue += '0'
                }
    
                //if there is more than 2 decimal places round backdown to 2
                if (correctValue.toString().split(".")[1].length > 2) {
                    correctValue = parseFloat($(this).val()).toFixed(2).toString();
                }
            }
    
            //update the value of the input with our conditions
            $(this).val(correctValue);
        });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input id="my-number-input" class="form-control trailing-decimal-input" type="number" min="0.01" step="0.01" value="0.00" />

    0 讨论(0)
  • 2020-11-28 06:42

    Take a look at this:

     <input type="number" step="0.01" />
    
    0 讨论(0)
  • 2020-11-28 06:43

    Solved following the suggestions and adding a piece of jQuery to force the format on integers:

    parseFloat($(this).val()).toFixed(2)
    
    0 讨论(0)
  • 2020-11-28 06:45

    Based on this answer from @Guilherme Ferreira you can trigger the parseFloat method every time the field changes. Therefore the value always shows two decimal places, even if a user changes the value by manual typing a number.

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $(".floatNumberField").change(function() {
                $(this).val(parseFloat($(this).val()).toFixed(2));
            });
        });
    </script>
    
    <input type="number" class="floatNumberField" value="0.00" placeholder="0.00" step="0.01" />

    0 讨论(0)
  • 2020-11-28 06:45

    My preferred approach, which uses data attributes to hold the state of the number:

    <input type='number' step='0.01'/>
    
    // react to stepping in UI
    el.addEventListener('onchange', ev => ev.target.dataset.val = ev.target.value * 100)
    
    // react to keys
    el.addEventListener('onkeyup', ev => {
    
        // user cleared field
        if (!ev.target.value) ev.target.dataset.val = ''
    
        // non num input
        if (isNaN(ev.key)) {
    
            // deleting
            if (ev.keyCode == 8)
    
                ev.target.dataset.val = ev.target.dataset.val.slice(0, -1)
    
        // num input
        } else ev.target.dataset.val += ev.key
    
        ev.target.value = parseFloat(ev.target.dataset.val) / 100
    
    })
    
    0 讨论(0)
提交回复
热议问题