Теперь, когда вы прочитали статью, которую я прокомментировал, вы должны знать корень своей проблемы. Вы можете частично обойти, что путем масштабирования вы поплавки ...
Тогда просто написать функцию, которая:
- Если его поплавок
- Вернуть булево представление делимости числа
function isDivisable(n, d) {
var ndI = 1 + "".indexOf.call(n, "."); //Index of the Number's Dot
var ddI = 1 + "".indexOf.call(d, "."); // Index of the Divisors Dot
if (ndI || ddI) { // IF its a float
var l = Math.max(("" + n).length - ndI, ("" + d).length - ddI); //Longest Decimal Part
var tmpN = (n * Math.pow(10, l)); //scale the float
var tmpD = (d * Math.pow(10, l));
return !~((tmpN % tmpD) - 1); //Substract one of the modulo result, apply a bitwise NOT and cast a boolean.
}
return !~((n % d) - 1); // If it isnt a decimal, return the result
}
console.log(isDivisable(5.30, 0.1));//true
Херес JSBin
Однако ...
Как Целые сохраняются с 64-битной точностью, максимальная точность лжет (2^53), и вы скоро превысит максимальную точность при масштабируя большие числа.
Так что это может быть хорошей идеей, чтобы получить какую-то BigInteger библиотеки для JavaScript если вы хотите проверить поплавки делимости
[Что каждый ученый должен знать о арифметики с плавающей запятой] (HTTP: // docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – C5H8NNaO4