Frage

Während der Arbeit an einem Projekt stieß ich auf ein JS-Script, das von einem ehemaligen Mitarbeiter erstellt wurde, der im Grunde genommen einen Bericht in Form von

Name : Value
Name2 : Value2

usw.

Das Peoblem ist, dass die Werte manchmal Schwimmer (mit unterschiedlicher Präzision), Ganzzahlen oder sogar in der Form sein können 2.20011E+17. Was ich ausgeben möchte, sind reine ganze Zahlen. Ich kenne jedoch nicht viel JavaScript. Wie würde ich eine Methode schreiben, die diese manchmal flotten und sie aufgibt?

War es hilfreich?

Lösung

Sie haben Ihre Eingabe in eine Nummer umwandeln und sie dann umrunden:

function toInteger(number){ 
  return Math.round(  // round to nearest integer
    Number(number)    // type cast your input
  ); 
};

Oder als Ein -Liner:

function toInt(n){ return Math.round(Number(n)); };

Testen mit unterschiedlichen Werten:

toInteger(2.5);           // 3
toInteger(1000);          // 1000
toInteger("12345.12345"); // 12345
toInteger("2.20011E+17"); // 220011000000000000

Andere Tipps

Wenn Sie zu einer bestimmten Anzahl von Ziffern runden müssen, verwenden Sie die folgende Funktion

function roundNumber(number, digits) {
            var multiple = Math.pow(10, digits);
            var rndedNum = Math.round(number * multiple) / multiple;
            return rndedNum;
        }

Laut dem ECMascript -Spezifikation, Zahlen in JavaScript werden nur durch das 64-Bit-Format mit doppelter Präzision IEEE 754 dargestellt. Daher gibt es in JavaScript nicht wirklich einen ganzzahligen Typ.

In Bezug auf die Rundung dieser Zahlen gibt es eine Reihe von Möglichkeiten, wie Sie dies erreichen können. Das Mathematik Das Objekt gibt uns drei Rundungsmethoden, die wir verwenden können:

Das Math.round () wird am häufigsten verwendet, es gibt den Wert zurück, der an die nächste Ganzzahl gerundet ist. Dann gibt es die Math.floor () Wich gibt die größte Ganzzahl weniger als oder gleich einer Zahl zurück. Zuletzt haben wir das Math.ceil () Funktion, die die kleinste Ganzzahl mehr als oder gleich einer Zahl zurückgibt.

Es gibt auch die tofixed () Dies gibt eine Zeichenfolge zurück, die die Nummer unter Verwendung von Festnetz-Notation darstellt.

Ps.: Da ist Kein 2. Argument in dem Math.round () Methode. Das tofixed () ist Nicht dh spezifisch, es ist innerhalb Die ECMAScript -Spezifikation ist ebenfalls

Hier ist eine Möglichkeit, verwenden zu können Math.round() mit einem zweiten Argument (Anzahl der Dezimalstellen für Runden):

// 'improve' Math.round() to support a second argument
var _round = Math.round;
Math.round = function(number, decimals /* optional, default 0 */)
{
  if (arguments.length == 1)
    return _round(number);

  var multiplier = Math.pow(10, decimals);
  return _round(number * multiplier) / multiplier;
}

// examples
Math.round('123.4567', 2); // => 123.46
Math.round('123.4567');    // => 123

Sie können auch verwenden toFixed(x) oder toPrecision(x) wo x ist die Anzahl der Ziffern.

Beide Methoden werden in allen wichtigen Browsern unterstützt

Sie können verwenden Math.round () für Rundungszahlen an die nächste Ganzzahl.

Math.round(532.24) => 532

Sie können auch verwenden parseInt () und Parsefloat () Um eine Variable in einen bestimmten Typ zu werfen, in diesem Fall Ganzzahl und schwimmender Punkt.

Eine sehr gute Annäherung für das Runden:

function Rounding (number, precision){

var newNumber;
var sNumber = number.toString();

var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;

if (number < 0)
  newNumber = (number -  5 * Math.pow(10,-increase));
else
  newNumber = (number +  5 * Math.pow(10,-increase));

var multiple = Math.pow(10,precision);

return Math.round(newNumber * multiple)/multiple;
}

Nur in einigen Fällen, wenn die Länge des Dezimalteils der Zahl sehr lang ist, ist sie falsch.

Math.floor (19,5) = 19 sollte auch funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top