例子:
1.15 / 0.01 = 114.99999999999999, is an Integer in my case
9.96 / 0.01 = 996.0000000000001, is an Integer in my case
15.121 / 0.01 = 1512.1, Not an Integer
Number.isInteger()
在以下情况下不准确:1.15 / 0.01
和 9.96 / 0.01
例子:
1.15 / 0.01 = 114.99999999999999, is an Integer in my case
9.96 / 0.01 = 996.0000000000001, is an Integer in my case
15.121 / 0.01 = 1512.1, Not an Integer
Number.isInteger()
在以下情况下不准确:1.15 / 0.01
和 9.96 / 0.01
function isQuotientInteger(dividend, divisor) {
return new Decimal(dividend).dividedBy(new Decimal(divisor)).isInteger();
}
let testInputs = [ { dividend: 1.15, divisor: 0.01 }, { dividend: 9.96, divisor: 0.01 }, { dividend: 15.121, divisor: 0.01 } , { dividend: 3.14159, divisor: 0.00001 }];
formatRow('Dividend', 'Divisor', 'Quotient is integer')
for(let testInput of testInputs) {
formatRow(testInput.dividend, testInput.divisor, isQuotientInteger(testInput.dividend, testInput.divisor))
}
function formatRow(...row) {
console.log(...row.map(f => (f + '').padEnd(10)))
}
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/decimal.js/10.3.1/decimal.min.js" integrity="sha512-Ou4M+sSU8oa+mE3juYqR3JmW633MUpMhe1cd+IusOtfjkMo8I3zXs4fRmjmCFqpRg5RK/geqoXBY8XRwFY2Rsg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
let ex1=1.15 / 0.01
let ex2=9.96 / 0.01
let ex3=15.121 / 0.01
const desired_place=3
function round(num, places) {
//round # to however many places you need
let multiplier = Math.pow(10, places);
let rounded= Math.round(num * multiplier) / multiplier;
return Number.isInteger(rounded)? true : false
}
console.log(round(ex1,desired_place)) //true
console.log(round(ex2,desired_place)) //true
console.log(round(ex3,desired_place)) /false
Number.isInteger()
在您列出的情况下产生意外结果,我们人类可以清楚地“看到”操作的结果必须是一个整数值。以下是一个实用的解决方案,用于查找给定精度的商是否为整数:Number.toFixed()
获取四舍五入到所需精度的数字,然后应用Number.toInteger()
。
function isInteger(arg) {
const precision = 12; // for example
return Number.isInteger(Number(arg.toFixed(precision)));
}
console.log(isInteger(1.15 / 0.01));
console.log(isInteger(9.96 / 0.01));
console.log(isInteger(15.121 / 0.01));
尝试检查余数。
console.log(1.15 % 0.01 === 0) // false
number
类型的精度,您可以考虑使用像 decimal.js 这样的库来处理额外的精度。 - Ricky Mo