Dogbert'in cevabı iyidir, ancak kodunuzun negatif sayılarla uğraşması gerekiyorsa, Math.floor
kendi başına beklenmedik sonuçlar verebilir.
Örneğin Math.floor(4.3) = 4
, amaMath.floor(-4.3) = -5
Tutarlı sonuçlar elde etmek için bunun gibi bir yardımcı işlev kullanın:
truncateDecimals = function (number) {
return Math[number < 0 ? 'ceil' : 'floor'](number);
};
var a = 5.467;
var truncated = truncateDecimals(a * 100) / 100;
İşte bu işlevin daha kullanışlı bir versiyonu:
truncateDecimals = function (number, digits) {
var multiplier = Math.pow(10, digits),
adjustedNum = number * multiplier,
truncatedNum = Math[adjustedNum < 0 ? 'ceil' : 'floor'](adjustedNum);
return truncatedNum / multiplier;
};
var a = 5.467;
var truncated = truncateDecimals(a, 2);
var b = 4235.24;
var truncated = truncateDecimals(b, -2);
Bu istenmeyen bir davranışsa, Math.abs
ilk satıra bir çağrı ekleyin :
var multiplier = Math.pow(10, Math.abs(digits)),
DÜZENLEME: shendz doğru bir şekilde bu çözümün kullanılmasının a = 17.56
yanlış üreteceğine işaret ediyor 17.55
. Bunun neden olduğu hakkında daha fazla bilgi için Her Bilgisayar Bilimcisinin Kayan Nokta Aritmetiği Hakkında Bilmesi Gerekenler'i okuyun . Ne yazık ki, tüm kayan nokta hatası kaynaklarını ortadan kaldıran bir çözüm yazmak, javascript ile oldukça zordur. Başka bir dilde tamsayılar veya belki bir Ondalık türü kullanırsınız, ancak javascript ile ...
Bu çözüm % 100 doğru olmalı , ancak aynı zamanda daha yavaş olacaktır:
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);
}
Hıza ihtiyaç duyan ancak aynı zamanda kayan nokta hatalarından kaçınmak isteyenler için BigDecimal.js gibi bir şey deneyin . Bu SO sorusunda diğer javascript BigDecimal kitaplıklarını bulabilirsiniz: "İyi bir Javascript BigDecimal kitaplığı var mı?" ve işte Javascript matematik kitaplıkları hakkında güzel bir blog yazısı