Offtopic Projekte
Kommentare Zurück zur Übersicht

Tausendertrennzeichen mit JavaScript

Was in Excel oder OpenOffice nur ein Mouseclick ist könnte in einem JavaScript-Code wie folgt aussehen - das Tausendertrennzeichen für z. B. Währungen!







Der JavaScript Code

Aufgerufen wird die Funktion mit einer Variablenzuweisung (für den Rückgabewert) und den drei Parametern: Die Zahl, der Modus und das Trennzeichen.
Achtung: Die Funktion gibt einen String zurück!
Der Quellcode kann auch im MachMal von css4.at eingesehen werden!

var neuerWert = tausenderpunkte(1000000, 0, ".");
Zur Zahl: Es werden nur Integer oder Float Werte ausgewertet. Für eine Dezimalzahl gilt der Punkt.
Die Modi: Integerwerte von 0 bis 4
  • 0: Ohne Nachkommastellen default
  • 1: Mit Nachkommastellen
  • 2: Mit Doppelnull als Nachkomma
  • 3: Einfacher Nachkommastrich
  • 4: Doppelter Nachkommastrich

Das Trennzeichen: Beliebiges Stringzeichen. empfohlen wird ein Punkt bzw. ein Leerzeichen. Benötigt Anführungezeichen weil es immer ein String ist!

Der JavaScript Funktionscode

function tausenderpunkte(zahl = 0, modus = 0, tz = ".") {
  if(isNaN(zahl)) {return "Eingabe ist keine Zahl!";}

  var temp = String(zahl);
  var nachkomma = "";
  var vorkomma = "";
  var ausgabeZahl = "";

  if(temp.indexOf(".") != -1) {
    var start = temp.indexOf(".");
    var ende = temp.length;
    nachkomma = temp.slice((start + 1), ende);
    vorkomma = temp.slice(0, start);
  }
  else {
    vorkomma = temp;
    nachkomma = "0";
  }

  var anzahl = vorkomma.length;
  var c = 0;

  if(anzahl => 4) {
    while(anzahl > c) {
      c++;
      var position = vorkomma.length - c;
      ausgabeZahl = vorkomma[position] + ausgabeZahl;
      if(position == 0) {break;}
      if(c % 3 == 0) {ausgabeZahl = tz + ausgabeZahl;}
    }
  }

  if(modus == 0) {ausgabeZahl = ausgabeZahl + "";}
  if(modus == 1) {ausgabeZahl = ausgabeZahl + "," + nachkomma;}
  if(modus == 2) {ausgabeZahl = ausgabeZahl + ",00";}
  if(modus == 3) {ausgabeZahl = ausgabeZahl + ",-";}
  if(modus == 4) {ausgabeZahl = ausgabeZahl + ",--";}

  return ausgabeZahl;
}

Code-Erklärungen

Funktionsnamen mit den drei Parametern. Eine Prüfung ob der erste Parameter auch eine Zahl ist Underline und vier Variablendeklarationen. Die _zahl wird in einen String() gewandelt.

function tausenderpunkte(zahl = 0, modus = 0, tz = ".") {
  if(isNaN(zahl)) {return "Eingabe ist keine Zahl!";}

  var temp = String(zahl);
  var nachkomma = "";
  var vorkomma = "";
  var ausgabeZahl = ""

Zuerst wird geprüft, ob in der übergebenen Zahl (jetzt in der _temp gespeichert) ein Dezimalzeichen vorkommt. Mit .indexOf wird ermittelt auf welcher Stelle ein bestimmtes Zeichen vorkommt. Wird keines gefunden, dann gibt die Methode -1 zurück. Bei Erfolg, wird die Position des Dezimalzeichen (der Punkt) gespeichert und mittles .slice die Nachkomma und Vorkommawerte sauber getrennt!

Wenn es keine Dezimalstellen gibt, dann wird die gesammte Zahl als Vorkommastelle definiert und der Nachkommastelle einfach eine Null mitgegeben.

if(temp.indexOf(".") != -1) {
  var start = temp.indexOf(".");
  var ende = temp.length;
  nachkomma = temp.slice((start + 1), ende);
  vorkomma = temp.slice(0, start);
}
else {
  vorkomma = temp;
  nachkomma = "0";
}

Die Anzahl der Stellen wird in der _anzahl Variable definiert. Ein Zähler _c wird mit dem Wert 0 vereinbart.

Es folgt eine Prüfung, ob die Zahl eigentlich mehr als 4 Stellen hat. Alles darunter wäre doch Sinnlos, weil welche Tausenderpunkte sollen gesetzt werden, bei einer Zahl die nicht größer als 999 ist?
Die while Schleife wird ausgeführt, so lange die Anzahl der Stellen größer als die Zählvariable _c ist.

Mit var _position = _vorkomma.length - _c; wird das Pferd von hinten gesattelt.
Während die Zählvariable immer größer wird, wird die Postion immer kleiner. Die einzelenen Strings werden von hinten gelesen und so auch wieder zusammengesetzt. Mit dem Unterschied, dass alle drei mal ein Trennzeichen gesetzt wird.
Hier leistet die Modulo Operation mit 3 hervorragende Arbeit. Alle drei mal gibt es eine 0 - also den Auftrag das Trennzeichen einzusetzen.
Erreicht die Position die Stelle 0 dann wird die Schleife verlassen. So verhindert man noch einen letzten Punkt wo er nicht sein soll!

var anzahl = vorkomma.length;
var c = 0;

if(anzahl => 4) {
  while(anzahl > c) {
    c++;
    var position = vorkomma.length - c;
    ausgabeZahl = vorkomma[position] + ausgabeZahl;
    if(position == 0) {break;}
    if(c % 3 == 0) {ausgabeZahl = tz + ausgabeZahl;}
  }
}

Zum Schluss wird noch der Modus aufgearbeitet. Wir erinnern uns: Beim Funktionsaufruf kann man entscheiden, wie mit der Nachkommastelle verfahren werden soll. Der return Auftrag beendet die Funktion ... et voilà!

if(modus == 0) {ausgabeZahl = ausgabeZahl + "";}
if(modus == 1) {ausgabeZahl = ausgabeZahl + "," + nachkomma;}
if(modus == 2) {ausgabeZahl = ausgabeZahl + ",00";}
if(modus == 3) {ausgabeZahl = ausgabeZahl + ",-";}
if(modus == 4) {ausgabeZahl = ausgabeZahl + ",--";}

return ausgabeZahl;
26. Nov 2024 - 10:35
Bitte lösche deine Website... So schlechter Code

26. Nov 2024 - 10:35
Bitte lösche deine Website... So schlechter Code
Thomas Maier css4.at Logo
Thomas Maier Impressum OER: CC BY NC SA 2023-11-01