Какой кошмар. В Javascript null/1e6= …нет, не null и не NaN (Not a Number - не число), и ошибку не выбрасывает. Это, видите ли, 0! Обычный ноль, который дальше спокойно участвует в вычислениях.
Увы и ах, и Javascript и PHP как ни в чём ни бывало производят с null’ом арифметические операции, втихомолку конвертируя его в ноль.
Это неожиданное
(
Read more... )
Это может зависеть от области применения расчётов. Я, например, изрядно намаялся когда считал результаты соревнований в Excel, который, например при сложении пустых ячеек с помощью + даёт ошибку, а с помощью функции sum - 0. Оба варианта на самом деле не подходят, и я замучился писать проверки аргументов.
Скажем, если мы считаем штраф, и 0 - штрафа нет, а null - участника тут совсем не было (моя первая интерпретация, что значит null), то сложить сумму из одних null и получить в результате 0 очень плохо: участник, который не появлялся ни на одном этапе в результате выигрывает. Здесь надо чтобы сумма null давала null (что в целом выглядит разумно). Смешанная сумма null+not null должна давать ошибку, ибо в данной схеме требуется какая-то отдельная обработка данной ситуации (штраф за пропуск этапа, определённый регламентом).
С другой стороны, если считать что участник получает баллы которых чем больше, тем лучше, то скорее всего вариант sum(null,null,...)=0 подойдёт, так же как и смешанный вариант sum(null,N)=N.
Вариант null/N=0 вообще достаточно странный, ибо если у нас ничего не было (null) и мы его поделили на N частей, то у нас должно в результате получиться опять ничего (null), я бы сделал так. Null/N=0 в некотором смысле отождествляет null и 0, что выглядит неразумным. Если понимать null как "значение неизвестно" (ещё одна возможная интерпретация), то "не знаю сколько"/N должно быть равно "не знаю сколько". Интерпретацию, для которой в результате разумно получить 0, я пока придумать не могу.
Сергей
Reply
Насколько я понимаю теорию реляционных баз данных, если участника совсем не было, то не должно быть соответствующей записи, а если запись есть,- значит, участник был, но его результат (пока) неизвестен.
Reply
Reply
Leave a comment