wake-up-neo.com

HTML5-Zahleneingabe - Zeigt immer 2 Dezimalstellen an

Gibt es eine Möglichkeit, einen input[type='number']-Wert so zu formatieren, dass immer 2 Dezimalstellen angezeigt werden?

Beispiel: Ich möchte statt "0.00"0 sehen.

Vielen Dank

81

Gelöst nach Befolgung der Vorschläge und Hinzufügen eines Teils von jQuery, um das Format auf Ganzzahlen zu erzwingen parseFloat($(this).val()).toFixed(2)

41

Sie können nicht wirklich, aber Sie könnten einen halben Schritt sein:

<input type='number' step='0.01' value='0.00' placeholder='0.00' />

48
Rich Bradshaw

Wenn Sie das Attribut step verwenden, wird es aktiviert . Es bestimmt nicht nur, wie viel es fahren soll, sondern auch die zulässigen Zahlen. Verwenden Sie step="0.01"sollte den Trick ausführen, dies kann jedoch davon abhängen, wie der Browser den Standard einhält.

<input type='number' step='0.01' value='5.00'>

14
Dissident Rage

Die Lösungen, die input="number"step="0.01" verwenden, funktionieren in Chrome hervorragend für mich, funktionieren jedoch in einigen Browsern nicht, insbesondere Frontmotion Firefox 35 in meinem Fall .. die ich unterstützen muss.

Meine Lösung bestand darin, jQuery mit dem jQuery Mask-Plugin von Igor Escobar wie folgt zu verwenden:

<script src="/your/path/to/jquery-mask.js"></script>
<script>
    $(document).ready(function () {
        $('.usd_input').mask('00000.00', { reverse: true });
    });
</script>

<input type="text" autocomplete="off" class="usd_input" name="dollar_amt">

Das funktioniert gut, natürlich sollte man den übergebenen Wert danach überprüfen :) HINWEIS: Wenn ich dies aus Gründen der Browserkompatibilität nicht tun müsste, würde ich die obige Antwort von @Rich Bradshaw verwenden.

7
little_birdie

Dies ist ein schneller Formatierer in JQuery, der die Funktion .toFixed (2) für zwei Dezimalstellen verwendet.

<input class="my_class_selector" type='number' value='33'/>


// if this first call is in $(document).ready() it will run
// after the page is loaded and format any of these inputs

$(".my_class_selector").each(format_2_dec);
function format_2_dec() {
    var curr_val = parseFloat($(this).val());
    $(this).val(curr_val.toFixed(2));
}

Nachteile: Sie müssen dies jedes Mal aufrufen, wenn die eingegebene Nummer geändert wird, um sie neu zu formatieren.

// listener for input being changed
$(".my_class_selector").change(function() {
    // potential code wanted after a change

    // now reformat it to two decimal places
    $(".my_class_selector").each(format_2_dec);
});

Anmerkung: Aus irgendeinem Grund gibt jQuery val () eine Zeichenfolge zurück, auch wenn eine Eingabe vom Typ 'number' ist. Daher der parseFloat ()

1
kblocks

Das ist die richtige Antwort:

<input type="number" step="0.01" min="-9999999999.99" max="9999999999.99"/>

0
Alex

ui-number-mask für eckige, https://github.com/assisrafael/angular-input-masks

nur das:

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

wenn du Wert eins nach dem anderen legst ....

need: 120,01

ziffer pro Ziffer

 = 0,01
 = 0,12
 = 1,20
 = 12,00
 = 120,01 final number.
0
Raphael Vitor

Ich weiß, dass dies eine alte Frage ist, aber mir scheint, dass keine dieser Antworten die gestellte Frage zu beantworten scheint. Hoffentlich hilft dies jemandem in der Zukunft.

Ja, Sie können immer 2 Nachkommastellen anzeigen, aber leider ist dies nicht allein mit den Elementattributen möglich. Sie müssen JavaScript verwenden.

Ich sollte darauf hinweisen, dass dies nicht ideal für große Zahlen ist, da dies immer die nachfolgenden Nullen erzwingt. Der Benutzer muss also den Cursor zurück bewegen, anstatt Zeichen zu löschen, um einen Wert über 9,99 festzulegen

//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
Verno

Mein bevorzugter Ansatz, bei dem data Attribute verwendet werden, um den Status der Zahl zu speichern:

<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
nikk wong

Dadurch werden maximal 2 Dezimalstellen erzwungen, ohne dass automatisch auf 2 Stellen gerundet wird, wenn der Benutzer die Eingabe nicht abgeschlossen hat.

function naturalRound(e) {

   let dec = e.target.value.indexOf(".")
   let tooLong = e.target.value.length > dec + 3
   let invalidNum = isNaN(parseFloat(e.target.value))

   if ((dec >= 0 && tooLong) || invalidNum) {
     e.target.value = e.target.value.slice(0, -1)
   }
}
0
SuperCodeBrah