Dogberts Antwort ist gut, aber wenn Ihr Code möglicherweise mit negativen Zahlen umgehen Math.floor
muss, kann dies zu unerwarteten Ergebnissen führen.
ZB Math.floor(4.3) = 4
aberMath.floor(-4.3) = -5
Verwenden Sie stattdessen eine Hilfsfunktion wie diese, um konsistente Ergebnisse zu erzielen:
truncateDecimals = function (number) {
return Math[number < 0 ? 'ceil' : 'floor'](number);
};
// Applied to Dogbert's answer:
var a = 5.467;
var truncated = truncateDecimals(a * 100) / 100; // = 5.46
Hier ist eine bequemere Version dieser Funktion:
truncateDecimals = function (number, digits) {
var multiplier = Math.pow(10, digits),
adjustedNum = number * multiplier,
truncatedNum = Math[adjustedNum < 0 ? 'ceil' : 'floor'](adjustedNum);
return truncatedNum / multiplier;
};
// Usage:
var a = 5.467;
var truncated = truncateDecimals(a, 2); // = 5.46
// Negative digits:
var b = 4235.24;
var truncated = truncateDecimals(b, -2); // = 4200
Wenn dies nicht erwünscht ist, fügen Sie in Math.abs
der ersten Zeile einen Anruf ein :
var multiplier = Math.pow(10, Math.abs(digits)),
BEARBEITEN : shendz weist richtig darauf hin, dass die Verwendung dieser Lösung mit a = 17.56
falsch erzeugt 17.55
. Weitere Informationen dazu finden Sie unter Was jeder Informatiker über Gleitkomma-Arithmetik wissen sollte . Leider ist es mit Javascript ziemlich schwierig, eine Lösung zu schreiben, die alle Ursachen für Gleitkommafehler beseitigt. In einer anderen Sprache würden Sie Ganzzahlen oder vielleicht einen Dezimaltyp verwenden, aber mit Javascript ...
Diese Lösung sollte 100% genau sein, ist aber auch langsamer:
function truncateDecimals (num, digits) {
var numS = num.toString(),
decPos = numS.indexOf('.'),
substrLength = decPos == -1 ? numS.length : 1 + decPos + digits,
trimmedResult = numS.substr(0, substrLength),
finalResult = isNaN(trimmedResult) ? 0 : trimmedResult;
return parseFloat(finalResult);
}
Für diejenigen, die Geschwindigkeit benötigen, aber auch Gleitkommafehler vermeiden möchten, versuchen Sie etwas wie BigDecimal.js . Weitere Javascript BigDecimal-Bibliotheken finden Sie in dieser SO-Frage: "Gibt es eine gute Javascript BigDecimal-Bibliothek?" und hier ist ein guter Blog-Beitrag über Mathematikbibliotheken für Javascript