3 回答

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
var intvalue = Math.floor( floatvalue );
var intvalue = Math.ceil( floatvalue );
var intvalue = Math.round( floatvalue );
// `Math.trunc` was added in ECMAScript 6
var intvalue = Math.trunc( floatvalue );
數(shù)學(xué)對(duì)象參考
例子
正
// value=x // x=5 5<x<5.5 5.5<=x<6
Math.floor(value) // 5 5 5
Math.ceil(value) // 5 6 6
Math.round(value) // 5 5 6
Math.trunc(value) // 5 5 5
parseInt(value) // 5 5 5
~~value // 5 5 5
value | 0 // 5 5 5
value >> 0 // 5 5 5
value >>> 0 // 5 5 5
value - value % 1 // 5 5 5
負(fù)
// value=x // x=-5 -5>x>=-5.5 -5.5>x>-6
Math.floor(value) // -5 -6 -6
Math.ceil(value) // -5 -5 -5
Math.round(value) // -5 -5 -6
Math.trunc(value) // -5 -5 -5
parseInt(value) // -5 -5 -5
value | 0 // -5 -5 -5
~~value // -5 -5 -5
value >> 0 // -5 -5 -5
value >>> 0 // 4294967291 4294967291 4294967291
value - value % 1 // -5 -5 -5
積極 - 更大的數(shù)字
// x = Number.MAX_SAFE_INTEGER/10 // =900719925474099.1
// value=x x=900719925474099 x=900719925474099.4 x=900719925474099.5
Math.floor(value) // 900719925474099 900719925474099 900719925474099
Math.ceil(value) // 900719925474099 900719925474100 900719925474100
Math.round(value) // 900719925474099 900719925474099 900719925474100
Math.trunc(value) // 900719925474099 900719925474099 900719925474099
parseInt(value) // 900719925474099 900719925474099 900719925474099
value | 0 // 858993459 858993459 858993459
~~value // 858993459 858993459 858993459
value >> 0 // 858993459 858993459 858993459
value >>> 0 // 858993459 858993459 858993459
value - value % 1 // 900719925474099 900719925474099 900719925474099
否定 - 更大的數(shù)字
// x = Number.MAX_SAFE_INTEGER/10 * -1 // -900719925474099.1
// value = x // x=-900719925474099 x=-900719925474099.5 x=-900719925474099.6
Math.floor(value) // -900719925474099 -900719925474100 -900719925474100
Math.ceil(value) // -900719925474099 -900719925474099 -900719925474099
Math.round(value) // -900719925474099 -900719925474099 -900719925474100
Math.trunc(value) // -900719925474099 -900719925474099 -900719925474099
parseInt(value) // -900719925474099 -900719925474099 -900719925474099
value | 0 // -858993459 -858993459 -858993459
~~value // -858993459 -858993459 -858993459
value >> 0 // -858993459 -858993459 -858993459
value >>> 0 // 3435973837 3435973837 3435973837
value - value % 1 // -900719925474099 -900719925474099 -900719925474099

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
按位OR運(yùn)算符
按位或運(yùn)算符可用于截?cái)喔↑c(diǎn)數(shù),它適用于正數(shù)和負(fù)數(shù):
function float2int (value) {
return value | 0;
}
結(jié)果
float2int(3.1) == 3
float2int(-3.1) == -3
float2int(3.9) == 3
float2int(-3.9) == -3
性能比較?
我創(chuàng)建了一個(gè)JSPerf測(cè)試,用于比較以下各項(xiàng)之間的性能:
Math.floor(val)
val | 0 按位OR
~~val 按位NOT
parseInt(val)
只適用于正數(shù)。在這種情況下,您可以安全地使用按位運(yùn)算和Math.floor函數(shù)。
但是,如果您需要使用代碼來處理正數(shù)和負(fù)數(shù),那么按位運(yùn)算是最快的(OR是首選運(yùn)算)。這個(gè)其他JSPerf測(cè)試比較相同的地方很明顯,因?yàn)轭~外的符號(hào)檢查Math現(xiàn)在是四個(gè)中最慢的。
注意
如評(píng)論中所述,BITWISE運(yùn)算符在帶符號(hào)的32位整數(shù)上運(yùn)算,因此將轉(zhuǎn)換大數(shù)字,例如:
1234567890 | 0 => 1234567890
12345678901 | 0 => -539222987

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
注意:您不能Math.floor()用作截?cái)嗟奶娲?,因?yàn)镸ath.floor(-3.1) = -4而不是-3!!
截?cái)嗟恼_替換將是:
function truncate(value)
{
if (value < 0) {
return Math.ceil(value);
}
return Math.floor(value);
}
添加回答
舉報(bào)