Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вытянуть только целую часть (https://javascript.ru/forum/dom-window/8000-vytyanut-tolko-celuyu-chast.html)

peter888 02.03.2010 16:33

Вытянуть только целую часть
 
Есть число:
2.11 или 2.50 или 2.99
Как мне отсюда вытянуть "2", независимо от цифр, что идут после точки ?

Kolyaj 02.03.2010 16:35

Math.floor

peter888 02.03.2010 16:38

Спасибо!

B@rmaley.e><e 02.03.2010 16:39

alert([~~2.99, ~~2.50, ~~2.11])

JsLoveR 02.03.2010 19:17

B@rmaley.e><e,
Забавно)

vk65535 03.03.2010 10:58

B@rmaley.e><e,
ухты, идея супер )

peter888 03.03.2010 11:08

ага, спасиб

e1f 03.03.2010 12:01

(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% быстрее ;)

B@rmaley.e><e 03.03.2010 13:19

Цитата:

Сообщение от e1f
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 не лучше ~~ (порой отстает на несколько мс).

e1f 03.03.2010 13:29

О, последний вариант мне нравится :)


Часовой пояс GMT +3, время: 13:09.