2014-10-18 2 views
-3

При попытке получить ложно для NaN Я также губит отрицательные числаКак не разрушить отрицательные числа NaN | 0

-0.2|0  //this will always return zero If the number is negative 

То, что я хотел сделать, было bitwize рядный как можно быстрее с просьбой, как мало, как я может, поскольку я устанавливаю ответ в массив в то же время, что и я.

array[i]=(sum)|0 

моя сумма иногда будет производить NaN

Ok, чтобы сделать мой вопрос яснее и добраться до корня ... почему -0,2 ложь, когда -1 нет? -0.2 не равен нулю! ноль это ложь, но -0,2 меньше нуля -0,2! == 0

+3

Графа числа «как» в вашем вопросе. :) – nicael

+0

Что вы ожидаете получить в качестве вывода для '-0.2 | 0'? – thefourtheye

+0

Побитовый оператор '|' действует как Math.floor, за исключением того, что он никогда не возвращает NaN. Где Math.floor вернет NaN, побитовое или вернет 0 – axelduch

ответ

1

Вы должны сначала сумму отлитого на номер (не является целым числом, которое является тем, что делает |), и если она возвращает NaN вы можете присвоить ноль вместо того, чтобы, как это:

array[i]= (+sum) || 0; 
+0

(+ (- 0.2)) || 0 работает! – 8DK

-2

Я не понимаю, почему вы хотели бы сделать это «как можно» просто ради встраивание его в выражении. Хороший код не соответствует коротким кодам.

В этом духе, рассмотреть что-то вроде

function nanToZero(number) { 
    return isNaN(number) ? 0 : number; 
} 

// usage 
array[i] = nanToZero(sum); 
+0

LOL, вызовы функций дороги! Я никогда не говорил «коротко», «Хороший код» был бы эффективным, если бы не задавал много вопросов и, конечно, не вызывал дополнительных функций за итерацию массива. – 8DK

+0

@ 8DK Нет, эффективный код также не является эквивалентом хорошего кода. Хороший код поддерживается, доступен для чтения и модульности. Вложение таких вещей нарушает такие чистые шаблоны кода. Только оптимизируйте производительность после того, как вы доказали, что вам это нужно *, иначе, как сказал Дональд Кнут много лет назад, вы работаете над корнем всего зла. Вы не упомянули ограничения производительности, поэтому я предположил, что вы на самом деле этого не доказали. Имейте в виду, что даже jQuery состоит из многих, многих функций, поэтому на самом деле это не так дорого. –

+0

Кроме того, если предположить, что нижний предел за вами, я не вижу, как это оправдывает нисходящий ход в любом случае, но, как я всегда говорю: все, что плавает на вашей лодке. –

Смежные вопросы