JavaScript вычисляет прямо пол отрицательных чисел и остаток нецелых чисел, следуя математическим определениям для них.
FLOOR определяется как «наибольшее целое число, меньшее, чем параметр», таким образом:
- положительные числа: FLOOR (X) = целая часть X;
- отрицательные числа: FLOOR (X) = целая часть X минус 1 (потому что она должна быть МЕНЬШЕ, чемпараметр, т. е. более отрицательный!)
REMAINDER определяется как «остаток» деления (евклидова арифметика).Когда дивиденд не является целым числом, частное, как правило, также не является целым числом, то есть нет остатка, но если частное вынуждено быть целым числом (и это то, что происходит, когда кто-то пытается получить остаток или модульчисло с плавающей запятой), очевидно, будет нецелое «осталось», очевидно.
JavaScript вычисляет все как положено, поэтому программист должен быть осторожным, чтобы задавать правильные вопросы (и люди должны быть осторожныответить на то, что задают!) Первый вопрос Ярина был НЕ «что такое целочисленное деление X на Y», а «сколько раз одно целое число переходило в другое».Для положительных чисел ответ одинаков для обоих, но не для отрицательных, потому что целочисленное деление (делитель на делитель) будет на -1 меньше, чем число, которое (делитель) «переходит» в другое (делимое).Другими словами, FLOOR вернет правильный ответ для целочисленного деления отрицательного числа, но Ярин не спросил этого!
gammax ответил правильно, этот код работает так, как его попросил Ярин.С другой стороны, Самуил не прав, он, наверное, не делал математику, иначе он бы увидел, что это работает (кроме того, он не сказал, что было делителем его примера, но я надеюсь, что это было3):
Остаток = X% Y = -100% 3 = -1
GoesInto = (X - Остаток) / Y = (-100 - -1) / 3 = -99/ 3 = -33
Кстати, я тестировал код на Firefox 27.0.1, он работал как положено, с положительными и отрицательными числами, а также с нецелыми значениями, как для делимого, так и для делителя.Пример:
-100.34 / 3.57: GoesInto = -28, Remainder = -0.3800000000000079
Да, я заметил, что есть проблема с точностью, но у меня не было времени проверить ее(Я не знаю, если это проблема с Firefox, Windows 7 или с FPU моего процессора).Для вопроса Ярина, который включает только целые числа, код gammax работает отлично.