math 向上取整_javascript 中的取整操作

在 JavaScript 中,我们常常会有对数字或者数字字符串的取整需求,要么向上取整Math.ceil(number),要么向下取整Math.floor(number),还有一种情况就是parseIntparseInt是当数字大于 0 时,向下取整,小于 0 时,向上取整。但是在 es6 中我们有了新的方法Math.trunc(number)

es5 和 es6 取整操作

const number = 80.6
// Old Way
number < 0 ? Math.ceil(number) : Math.floor(number);
// or
const es5 = Number.parseInt(number);
// 80
// ✅ES6 Way
const es6 = Math.trunc(number);
// 80

现在我们来看一些特殊值的结果。

  • Math.trunc
Math.trunc(80.1); // 80
Math.trunc(-80.1); // -80
Math.trunc('80.1'); // 80
Math.trunc('hello'); // NaN
Math.trunc(NaN); // NaN
Math.trunc(undefined); // NaN
Math.trunc(); // NaN
  • parseInt
parseInt(80.1); // 80
parseInt(-80.1); // -80
parseInt('80.1'); // 80
parseInt('hello'); // NaN
parseInt(NaN); // NaN
parseInt(undefined); // NaN
parseInt(); // NaN

parseInt 和 Math.trunc 的区别

parseInt 常常被接收一个字符串的参数,而 Math.trunc 则可以接收一个数字参数,所以如果要对数字取整,还是建议使用 Math.trunc。

parseInt 使用中的问题

当你使用 parseInt 的时候,如果你传入的不是字符串,比如传入一个数字,parseInt 会先调用数字的 toString() 方法,大多数情况下,parseInt 是没有问题的,但是下面的情况就会出现问题:

const number = 11111111111111111111111111111;
const result = parseInt(number);
console.log(result); // 1 <--  

这是什么原因呢,因为你传的参数不是 String,所以 parseInt 会先调用 toString() 方法。

const number = 11111111111111111111111111111;
const result = number.toString();
console.log(result); // "1.1111111111111112e+28"
const last = parseInt(result); // 1 <--  

所以当我们对 1.1111111111111112e+28 取整时,就只能取到 1,由于这种潜在的问题,你就需要使用 Math 的方法。

浏览器支持情况

大多数现代浏览器都是支持的,除了 ie。

1caa79a96c1865a8848db0b31eacd3b2.png

其他取整方法

位操作符 NOT

console.log(~~80.6); // 80

位操作符 OR

console.log(80.6 | 0); // 80

reference

  • MDN Web Docs: Math.trunc
  • MDN Web Docs: parseInt
  • MDN Web Docs: Bitwise operators
  • JS Tip: Use parseInt for strings, NOT for numbers
  • 2ality: parseInt doesn’t always correctly convert to integer
  • Number Truncation in JavaScript
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值