Вытянуть только целую часть
Есть число:
2.11 или 2.50 или 2.99 Как мне отсюда вытянуть "2", независимо от цифр, что идут после точки ? |
Math.floor
|
Спасибо!
|
alert([~~2.99, ~~2.50, ~~2.11]) |
B@rmaley.e><e,
Забавно) |
B@rmaley.e><e,
ухты, идея супер ) |
ага, спасиб
|
(function(){ var i, num = 2.50, now = new Date().getTime(); for ( i = 1000000; i--; ) Math.floor(num); alert('Math.floor: ' + (new Date().getTime() - now) + 'ms'); now = new Date().getTime(); for ( i = 1000000; i--; ) ~~num; alert('~~: ' + (new Date().getTime() - now) + 'ms'); }()); В ИЕ и в Опере ~~ лидирует с огромным отрывом, в ФФ разница почти незамента (~5%). Интересно :) UPD В Сафари тоже перевес на стороне ~~, а вот Chrome говорит, что Math.floor на 5-10% быстрее ;) |
Цитата:
И еще: ~~ не эквивалентен Math.floor'у. alert( [~~-5.5, Math.floor(-5.5)] ) UPD: n|0 (function(){ var i, num = 2.50, now = +new Date, a = []; for (i = 1000000; i--; ) Math.floor(num); a.push('Math.floor: ' + (new Date().getTime() - now) + 'ms'); for (i = 1000000, now = +new Date; i--; ) ~~num; a.push('~~: ' + (new Date().getTime() - now) + 'ms'); for ( i = 1000000, now = +new Date(); i--; ) num|0; a.push('0|: ' + (new Date().getTime() - now) + 'ms'); for ( i = 1000000, now = +new Date(); i--; ) num<<0; a.push('<<0: ' + (new Date().getTime() - now) + 'ms'); for ( i = 1000000, now = +new Date(); i--; ) num>>0; a.push('>>0: ' + (new Date().getTime() - now) + 'ms'); alert(a.join('\n')); }());Новый вариант уделывает Math.floor в хромом. В опере и ие8 он лучше ~~. В FF не лучше ~~ (порой отстает на несколько мс). |
О, последний вариант мне нравится :)
|
Ну и еще есть n>>0, n<<0 =)
~~ работает там так хорошо потому, что огнелис использует предкомпиляцию. alert([function(){return ~~5.3},function(){return 5.3|0}])Запускать в огнелисе. |
Часовой пояс GMT +3, время: 11:51. |