JavaScript + vor Klammern

Hendoul

Commander
Registriert
Apr. 2008
Beiträge
2.162
Hi :)

Ich habe ein bisschen über das Runden in Javascript recherchiert und bin dabei über folgendes gestolpert:

Javascript:
function roundToTwo(num) {  
    return +(Math.round(num + "e+2")  + "e-2");
}

  1. Wozu das + vor der Klammer? Hat das was mit IIFE zu tun?
  2. Was bewirkt das "e+2" genau? Sieht irgendwie nach wissenschaftlicher Notation aus?
 
Brechen wir das doch mal runter:

Nehmen wir mal an, num hat den Wert 5.

num + "e+2" erzeugt ein string, in dem "5e+2" steht.

Math.round("5e+2")
-> Math.round arbeitet mit zahlen, also konvertiert es diesen string in eine Zahl (5 * 10 ^ 2). Und 500 gerundet ist 500.

Ergibt also +(500 + "e-2")
-> 500 + "e-2" wird wieder wie oben zu einem string.

Ergibt also +("500e-2"). Das + konvertiert diesen string wieder in eine Zahl und 500 * 10 ^ (-2) ergibt 5.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Hayda Ministral und GustlPC
Am besten einfach mal ausprobieren. Es rundet auf die Nachkommastelle, die als Potenz angegeben ist.

1586984026766.png


Das ganze geht übrigens besser, ohne strings (im Firefox mehr als doppelt so schnell laut https://jsben.ch/) und beliebiger Anzahl an Nachkommastellen:
Javascript:
function round(value: number, precision: number): number {
  const factor = 10 ** precision;
  return Math.round(value * factor) / factor;
}
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Hayda Ministral und netzgestaltung
roundToTwo ist ja aber auch ein toller Name. Könnte dasselbe machen wie makeEven.
(und das ist nicht an Hendoul gerichtet)
 
Da wurde ja aber auch die Lösung präsentiert: Math.round((num + Number.EPSILON) * 100) / 100
 
Stimmt. Und ist auch ein bisschen verständlicher finde ich. Aber darum ging es ja nicht :D
 
Zurück
Oben