Wie formatiere ich eine Zahl auf 2 Dezimalstellen, aber nur, wenn es bereits Dezimalstellen gibt?

Lesezeit: 3 Minuten

Benutzer-Avatar
Jamison

Ich habe ein jQuery 1.5+ Skript, und Sie wählen eine Menge in einem Dropdown-Menü (1,2,3 usw.) aus und es multipliziert diese Menge mit 1,50 $, um Ihnen einen Gesamtpreis anzuzeigen. Grundsätzlich – es wird die ausgewählte Menge (1, 2, 3 usw.) mit dem Grundpreis von 1,50 $ multipliziert – ABER – ich kann nicht herausfinden, wie der Preis korrekt mit Dezimalstellen angezeigt wird – Beispiel: Wenn Sie eine Menge von 2 auswählen, Der Preis wird korrekt als 3 $ (ohne Dezimalstellen) angezeigt. Aber wenn Sie 1 oder 3 wählen, wird der Preis als 1,5 $ / 4,5 $ angezeigt – es fehlt eine 0 an der Hundertstel-Dezimalstelle.

Hier ist der Code – eine Idee, wie man eine zweite 0 anzeigt, falls es nicht bereits zwei Dezimalstellen gibt? 3 $ sollten 3 $ bleiben, aber 4,5 $ sollten 4,50 $ werden usw. – Ich kann es nicht zum Laufen bringen, ohne ALLE Zahlen mit zwei Dezimalstellen anzuzeigen, und da stecke ich fest!

<script type="text/javascript">     
    $(function() {         
        $('#myQuantity').change(function() {             
            var x = $(this).val();                      
            $('#myAmount').text('$'+(x*1.5));// this is the part that isn't displaying decimals correctly!
        });     
    }); 
</script>

Ich experimentiere mit so etwas wie result = num.toFixed(2); kann es aber noch nicht zum laufen bringen.

Dankesehr!

  • Inwiefern funktioniert “toFixed(2)” nicht?

    – Spitze

    11. April 2011 um 14:51 Uhr

Dies sollte die Arbeit erledigen:

var formattedNumber = (x * 1.5).toFixed(2).replace(/[.,]00$/, "");

  • Funktioniert perfekt! Das Entfernen von *1,5 macht dies zu einer großartigen wiederverwendbaren Codezeile

    – David

    1. Juni 2016 um 12:46 Uhr

  • Warum das Komma in der RegEx?

    – Merlin -sie-sie-

    14. September 2017 um 18:33 Uhr

  • @merlinpatt Dezimaltrennzeichen kann je nach Gebietsschema variieren

    – Ebuall

    3. August 2020 um 7:02 Uhr

  • /[.,]0+$/ scheint eine bessere allgemeine Lösung zu sein.

    – Henrique Bruno

    17. Juli 2021 um 0:51 Uhr

Ich schlage vor:

Math.round(floatNumber*100)/100;

Es fügt automatisch 0, 1 oder 2 Dezimalstellen hinzu.

  • Beste Lösung. Früher habe ich “Menge % 1 === 0 ? Menge: Menge.toFixed(2)” verwendet, aber deine ist besser

    – AntiCZ

    12. Juni 2017 um 12:59 Uhr


  • Das ist meiner Meinung nach die beste Antwort

    – Joel Duckworth

    10. November 2020 um 2:58 Uhr

Benutzer-Avatar
Peter

Arbeitsbeispiel: http://jsfiddle.net/peeter/JxPZH/

$(document).ready(function() {
    $('#itemQuantitySelect_3').change(function() {
        
        var itemPrice = 1.50;
        var itemQuantity = $(this).val();
        var quantityPrice = (itemPrice * itemQuantity);
        if(Math.round(quantityPrice) !== quantityPrice) {
            quantityPrice = quantityPrice.toFixed(2);
        }
        
        $(this).next("span").html("$" + quantityPrice);

    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="https://stackoverflow.com/" method="post">
    <select id='itemQuantitySelect_3' name="itemQuantity_3">
        <option value="1">1 Item</option>
        <option value="2">2 Items</option>
        <option value="3">3 Items</option>
    </select>
    <span>$1.50</span>
</form>

  • Eine Antwort sollte wirklich den Code enthalten in der Antwort anstatt nur einen Link zu jsfiddle ohne Erklärung oder Kommentar.

    – Matt Burland

    21. August 2015 um 15:44 Uhr

Wie wäre es mit

var str = num.toFixed(2).replace(/\.00$/, '');

Wenn eine Zahl %1 nicht Null zurückgibt, ist sie keine ganze Zahl.

//var s="123";
var s="1.2";

s=Number(s);
alert(s%1? s.toFixed(2): s);

  • Hier gibt es eine Falte, bei der diese Antwort zu einem anderen Ergebnis als die anderen Antworten führen würde replace. Zum Beispiel, wenn s = 1.001dann würde dies Ihnen das Ergebnis geben 1.00während die replace Ansatz würde Ihnen geben 1. Was richtiger ist, hängt wirklich davon ab, was Sie versucht haben zu tun.

    – Matt Burland

    21. August 2015 um 15:51 Uhr

Benutzer-Avatar
daCoda

Verwenden Sie diese Funktion:

//E.g. 0.5 becomes 0.50; 7 stays as 7.

function twoDecimalPlacesIfCents(amount){
    return (amount % 1 !== 0) ? amount.toFixed(2) : amount;
}

  • Hier gibt es eine Falte, bei der diese Antwort zu einem anderen Ergebnis als die anderen Antworten führen würde replace. Zum Beispiel, wenn s = 1.001dann würde dies Ihnen das Ergebnis geben 1.00während die replace Ansatz würde Ihnen geben 1. Was richtiger ist, hängt wirklich davon ab, was Sie versucht haben zu tun.

    – Matt Burland

    21. August 2015 um 15:51 Uhr

Benutzer-Avatar
Rafael de Freitas

const number = Number(Number(value).toFixed

Damit kannst du deine Zahl auf die richtige Anzahl an Nachkommastellen umrechnen und bei der Rückwandlung in Zahl alle nutzlosen Nullen loswerden.

1179080cookie-checkWie formatiere ich eine Zahl auf 2 Dezimalstellen, aber nur, wenn es bereits Dezimalstellen gibt?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy