javascript去整数和小数部分的方法有很多,梳理一下可以进行自由选择使用

一.取数值整数部分

1.使用parseInt()进行取整

相信大家对parseInt()是非常熟悉了,parseInt(string, radix string为字符串,radix为介于2-36之间的数。使用者告诉这个函数string(比如11)是radix(比如2)进制的,函数将默认返回string以十进制时显示的数。

示例:

parseInt('123')//123
parseInt(2.34)//2
parseInt(-2.34)//2

但是顾名思义,paseInt是用来转换string类型的,第一步将值转换为Number类型,第二步转换为相应的进制,并取整。如果用来对数值进行取整那么它将进行额外的性能开销。

2.使用Math.round()Math.ceil()和Math.floor()方法进行取整

Math.round()是四舍五入进行取整,Math.ceil()是向上取整,Math.floor()是向下取整

如果我们仅仅取整不考虑四舍五入就不能使用Math.round()。要达到paseInt()的结果,我们需要根据数值的正负值分别使用Math.floor()和Math.ceil()进行取整。正数使用Math.floor()向下取整,负数使用Math.ceil()向上取整。

使用Math.round和Math.ceil实现trunc方法,要比使用parseInt的性能好,因为省去了转字符串。

示例:

function trunc(num){return num>=0 ? Math.floor(num) : Math.ceil(num);
}trunc(3.45)//3
trunc(-3.45)//-3

3.使用es6中的Math.trunc()方法进行取整

Math.trunc()是es6中新增的方法,方法会将数字的小数部分去掉,只保留整数部分。返回给定的数值的整数部分。

  • 不像 Math 的其他三个方法: Math.floor()Math.ceil()Math.round()Math.trunc() 的执行逻辑很简单,仅仅是删除掉数字的小数部分和小数点,不管参数是正数还是负数。
  • 传入该方法的参数会被隐式转换成数字类型。
  • 因为 trunc()Math 对象的静态方法,你必须用 Math.trunc() 来使用,而不是调用你创建的 Math 对象的一个实例方法(Math 没有构造函数)

示例:

Math.trunc(13.37)    // 13
Math.trunc(42.84)    // 42
Math.trunc(0.123)    //  0
Math.trunc(-0.123)   // -0
Math.trunc("-1.123") // -1
Math.trunc(NaN)      // NaN
Math.trunc("foo")    // NaN
Math.trunc()         // NaN

4.利用位操作符“ | ”进行取整

看到有些库的时候会有这样的骚操作:

console.log(3.45 | 0) //3
console.log(-3.45 | 0) //-3

讲道理这个东西是一脸懵逼的,大佬不愧是大佬。

具体可以看ECMA-262文档:

对位操作的处理中,第5、6步,会把操作数转为Int32,所以我们就可以利用这个特点来使用“|”操作符了。

但是位操作符是有隐藏的坑的,因为位操作符是将操作数转换为Int32,所以他不能处理超过32位的数值,而javaScript有效整数范围是53位。

console.log(2147483647 | 0) // 2147483647  //console.log(Math.pow(2,32/2-1 | 0))
console.log(2147483648  | 0) //0

那么用“|”有什么好处呢?咱不谈压缩代码量什么的,就说逼格高不高吧,绝对的骚操作。在明确知道数值范围不会超过32位整数的时候,可以考虑使用这个技巧。

5.利用数值减去取得的小数取整

在已经取得数值小数的情况下,可以使用数值减去得到的小数,就可以取得该数值的整数了。

console.log(3.45 - 3.45%1) //3
console.log(-3.45 - -3.45%1) //-3

二.取数值的小数部分

1.利用数值减去取得的整数取整

取小数的方式很简单了,在上面取得整数的基础上,用数值减去整数部分即可得到小数部分

function fract(num){return num - Math.trunc(num);
}fract(3.45) // 0.45   0.4500000000000002
fract(-3.45) //-0.45  -0.4500000000000002

但是这种方式是有问题的,比如我们预期的结果是3,和-3,但是实际上结果是0.4500000000000002和-0.4500000000000002,你可以console.log(3.45 - 3)测试结果是否一致,结果也是有问题的。这是因为计算机在计算浮点数的时候本身的问题,所以不推荐。

2.利用取模(%)的方式取整

我们有更简单的方式:JavaScript的取模运算%并不限于整数运算,可以对浮点数取模。所以将数值与1进行取模运算即可得到小数部分。

console.log(3.45 % 1) //0.45
console.log(-3.45 % 1) // -0.45

JS分别取数值的整数部分和小数部分的几种方法相关推荐

  1. 利用Java实现从键盘输入一个double型数,输出该数的整数部分和小数部分

    从键盘输入一个double型数,输出该数的整数部分和小数部分 import java.util.Scanner;public class FractionDemo {public static voi ...

  2. matlab怎么提取小数部分,[转载]如何在Matlab中得到一个单、双精度数的整数部分和小数部分?...

    对于一个单.双精度数,获得其单独的整数部分或小数部分在一些程序中有特殊的作用.如对一个数进行去模运算.对一幅图像进行剪切使其高.宽是某个数的整数倍等等. 对于取整,在C语言中有专门的取整符号[],在M ...

  3. C语言输出浮点数的符号、整数部分和小数部分

    C语言输出浮点数的符号.整数部分和小数部分 编写程序,从键盘输入一个不等于0的浮点数,然后分别输出这个浮点数的符号.整数部分和小数部分.例如输入-123.456,输出应该是(按下列格式输出): Sig ...

  4. matlab用双精度编程,如何在Matlab中得到一个单、双精度数的整数部分和小数部分?...

    对于一个单.双精度数,获得其单独的整数部分或小数部分在一些程序中有特殊的作用.如对一个数进行去模运算.对一幅图像进行剪切使其高.宽是某个数的整数倍等等. 对于取整,在C语言中有专门的取整符号[],在M ...

  5. PHP取整数函数常用的四种方法

    PHP取整数函数常用的四种方法: 1.直接取整,舍弃小数,保留整数:intval():  2.四舍五入取整:round():  3.向上取整,有小数就加1:ceil():  4.向下取整:floor( ...

  6. js 把字符串转成json对象的三种方法

    js 把字符串转成json对象的三种方法 不管字符串是否含有转义字符,都能转换成 Json 对象 1, js自带的eval函数,其中需要添加小括号eval('('+str+')'); function ...

  7. js中截取字符串前几位的两种方法slice()substring()

    在Javascript使用字符串中,我们不一定需要全部的字符串,这时就需要截取字符串.本文主要介绍js中截取字符串前几位的两种方法:1.使用slice() 方法:2.使用substring() 方法. ...

  8. H5 微信小程序 价格保留两位小数 分为整数部分和小数部分

    在项目中经常遇到将价格分为整数和小数部分,字体大小不一样显示. const actualNumber = item.actualAmount.toFixed(2); const priceArray ...

  9. H5 微信小程序 价格保留两位小数 分为整数部分和小数部分

    在项目中经常遇到将价格分为整数和小数部分,字体大小不一样显示. const actualNumber = item.actualAmount.toFixed(2); const priceArray ...

最新文章

  1. 微信小程序实现滑动tab切换和点击tab切换并显示相应的数据(附源代码)
  2. 浅谈图片蒙版效果-webkit-mask
  3. Linux下的sed命令使用详解
  4. HTML5 大战移动应用(一)
  5. ServletConfig对象和ServletContext对象
  6. 如何在 SAPGUI 的同一个屏幕显示两个 ALV list
  7. Compass样式重置
  8. Springboot2数据访问
  9. Android中对list的日期元素进行排序
  10. key php 转小写_PHP开发常识
  11. web 导出文件时如何让用户选择路径_Visual Paradigm 教程[UML]:如何绘制动画UML活动图?...
  12. 5个python爬虫教材,让小白也有爬虫可写,含视频教程!
  13. Hershell:跨平台反向Shell生成器
  14. 《一页纸项目管理》读书笔记
  15. ADS(Advanced Design system)仿真对电路进行阻抗匹配
  16. WebService的简单示例
  17. 通信原理及系统系列38——图解过采样和欠采样
  18. Duanxx的技术问题:word界面显示模糊
  19. TMS320F2837x开发例程使用手册(3)
  20. 利用HttpWebRequest自动抓取51la统计数据

热门文章

  1. 数据资产管理的5个步骤和6个要素
  2. 服务器被攻击怎么办?如何防止服务器被攻击?
  3. 用Python把B站视频弹幕爬下来,绘制词云图看看大家最关心什么!
  4. 安卓游戏应用如何在linux上流畅运行
  5. python编写的函数调用说法正确的是_python逻辑题(以下10道选择题有唯一答案,请编写自定义函数judge遍历答案列表并汇报正确答案)...
  6. linux fq队列,理解fq_codel之概述
  7. 细说微信h5棋牌游戏如何在微信中做好防封防屏蔽下载工作
  8. java图形化界面编程之Swing
  9. 分享几个比较通用的学习网站
  10. A40i使用笔记:系统配置