function fn(min, max) {
return Math.round(Math.random() * (max - min - 2) + min + 1); // (min, max)
return Math.round(Math.random() * (max - min) + min); // [min, max]
return Math.ceil(Math.random() * (max - min) + min); // (min, max]
return Math.floor(Math.random() * (max - min) + min); // [min, max)
}
参考:JS - 生成随机数的方法汇总(不同范围、类型的随机数)
将它对 1 进行取模,看看是否有余数。
function isInt(num) {
return num % 1 === 0;
}
console.log(isInt(4)); // true
console.log(isInt(12.2)); // false
console.log(isInt(0.3)); // false
或者使用 Number.isInterger()
function isInt(num) {
return Number.isInteger(num);
}
console.log(isInt(4)); // true
console.log(isInt(12.2)); // false
console.log(isInt(0.3)); // false
二进制模拟十进制进行计算时 的精度问题
JavaScript存在精度丢失问题,由于有些小数无法用二进制表示,所以只能取近似值,解决方法有:
// ES6的 Number.EPSILON , 这个值无限接近于0。0.1+0.2的精度误差在这个值的范围内
function numbersEqual(a,b) {
return Math.abs(a-b)<Number.EPSILON;
}
var a= 0.1 + 0.2, b = 0.3;
console.log(numbersEqual(a,b)); //true
// parseFloat + 内置函数toFixed
function formatNum(num, fixed = 10) {
// a.toFixed(fixed) 先转为小数点10位的字符串 "0.3000000000"
return parseFloat(num.toFixed(fixed)) // 然后通过parseFloat转为浮点数
}
var a = 0.1 + 0.2;
console.log(formatNum(a)); //0.3
// 内置函数toPrecision(中文:精确,精度)
// 参数是精度.比如5.1234,传2返回5.1,传1返回5;0.2+0.1传2返回0.30
(0.1 + 0.2).toPrecision(10) == 0.3 // true
封装方法:
function formatMoney(amount, precision = 2) {
// 确保精度为非负整数
if (precision < 0 || !Number.isInteger(precision)) {
throw new Error('Precision must be a non-negative integer');
}
// 将金额转换为字符串,并根据精度截取小数部分
const factor = Math.pow(10, precision);
const formattedAmount = Math.round(amount * factor) / factor;
return formattedAmount.toFixed(precision);
}
// 使用示例
console.log(formatMoney(0.1 + 0.2)); // 输出 "0.30"
console.log(formatMoney(0.1 + 0.2, 3)); // 输出 "0.300"
console.log(formatMoney(1234.5678, 2)); // 输出 "1234.57"
console.log(formatMoney(1234.5678, 0)); // 输出 "1235"