AS3数字取整
AS3 数字取整方法
int()去掉小数点
trace(int(3.14)); //输出3
trace(int(-3.14)); //输出-3
Math.round()方法:
Math.round()可以四舍五入对数字取整
trace(Math.round(39.88)); //输出40
trace(Math.round(58.33)); //输出58
Math.floor()方法:
Math.floor()可以向下取整
trace(Math.floor(39.88)); //输出39
trace(Math.floor(58.33)); //输出58
Math.ceil()方法:
Math.ceil()可以向上取整
trace(Math.ceil(39.88)); //输出40
trace(Math.ceil(58.33)); //输出59
toFixed()方法:
toFixed()方法四舍五入取指定位数的小数点,当其中参数为0时表示不留小数点
var temp:Number=3.1415926
//toFixed()中的参数就是需要取的小数位数,0表示不留小数点
var temp:Number=3.1415926
trace(temp.toFixed(2)); //输出3.14
trace(temp.toFixed(0)); //输出3
temp=18.888;
trace(temp.toFixed(0)); //输出19
==============================
Math.round()方法取小数位数:
比如说3.14159要精确到.001位,则先3.14159/.001,然后再Math.round(3.14159/.001),最后在把结果乘以需要精确的位数Math.round(3.14159/.001)*.001
trace(Math.round(3.14159/.001)*.001); //输出3.142
trace(Math.round(3.14159/.01)*.01); //输出3.14
如果不想四舍五入,那直接改round()方法为floor()或者ceil()方法即可
toFixed()方法取小数位数:
直接指定toFixed()中的参数即可,比如要留两位小数,则toFixed(2)
var temp:Number=3.1415926
trace(temp.toFixed(1)); //输出3.1
temp=18.888;
===========================================
无论刚入门的还是有一定AS3编程基础的,对Math类应该都不陌生了,但Math类的性能又知多少呢?请看下文吧。
1、Math.floor()
通俗的讲这是一个取整函数。
其实官方解释是
返回由参数 val 指定的数字或表达式的下限值。 下限值是小于等于指定数字或表达式的最接近的整数。
性能测试:
var num:Number = Math.PI;
var length:int = 10000000;
var time:int = getTimer();
for(var i:int = 0; i < length; i ++){
Math.floor(num);
}
trace(getTimer() - time);
// 结果:1865
var num:Number = Math.PI;
var length:int = 10000000;
var time:int = getTimer();
for(var i:int = 0; i < length; i ++){
int(num);
}
trace(getTimer() - time);
// 结果:69
结果很明显,int比floor快,可能大家就要说了,那Adobe傻X写个这样接口干什么?其实这就是我想说的对于floor的使用误区。
仔细看官方解释,其实floor不是一个真正我们所理解的取整函数,他是去找最接近自己,且比自己小或者等于的整数,那这是什么意思呢?
var num:Number = - Math.PI;
trace(int(num));
trace(Math.floor(num));
// 结果1:-3
// 结果2:-4
这个例子很明确表示,当目标数字是负数时,int和floor所得出的结果不一样。
int()的官方解释
将给定数字值转换成整数值。 从小数点处截断十进制值。
相信看到这,你已经很明白了。
但是实际上,如果你这样去使用int(),跟floor输出的结果相同:
var num:Number = - Math.PI;
var length:int = 10000000;
var time:int = getTimer();
for(var i:int = 0; i < length; i ++){
if(num < 0){
int(num) - 1;
}else{
int(num);
}
}
trace(getTimer() - time);
// 结果:132
====================================================================
2、Math.pow()
对于这个方法,我也不知道说什么好了,先看性能测试吧:
var a:int = 3;
var b:int = 4;
var c:int = 5;
var length:int = 10000000;
var time:int = getTimer();
for(var i:int = 0; i < length; i ++){
c * c == a * a + b * b;
}
trace(getTimer() - time);
// 结果:95
var a:int = 3;
var b:int = 4;
var c:int = 5;
var length:int = 10000000;
var time:int = getTimer();
for(var i:int = 0; i < length; i ++){
Math.pow(c,2) == Math.pow(a,2) + Math.pow(b,2);
}
trace(getTimer() - time);
// 结果:7999
勾三股四弦五大家应该比较多,但是用"*"乘法运算和pow的性能比较那是非常明显啊。
难道大家又想说Adobe傻逼了?这儿我为它平反吧。
var num:Number = Math.PI;
var length:int = 10000000;
var time:int = getTimer();
for(var i:int = 0; i < length; i ++){
Math.pow(num,10000);
}
trace(getTimer() - time);
// 结果:6682
先不说"*"乘法运算比pow快,就上面这段你能把它换算成使用"*"乘法运算吗?
而且pow其实是可以这样用的:(数学学得好都知道开方其实是可以转换成乘方来算的)
trace(Math.pow(27,1/3));
trace(Math.pow(256,1/4));
trace(Math.pow(3125,1/5));
而开方函数Adobe只提供了sqrt一个开平方根的接口(经测试Math.sqrt(9)比Math.pow(9,1/2)快,但开立方等就得靠pow了)。
================================================
3、Math.round()
这个方法跟floor一样的,先看性能测试:
var num:int = Math.PI;
var length:int = 10000000;
var time:int = getTimer();
for(var i:int = 0; i < length; i ++){
Math.round(num);
}
trace(getTimer() - time);
// 结果:1931
var num:int = Math.PI;
var length:int = 10000000;
var time:int = getTimer();
for(var i:int = 0; i < length; i ++){
int(num + 0.5)
}
trace(getTimer() - time);
// 结果:68
四舍五入其实加个0.5在取整,这样也是可以的,只不过用这个算法,存在跟第一个同样的问题,当目标数值为负时,两种方式结果不一样,需要加个判断,目标数值为负就把结果-1。
AS3数字取整的更多相关文章
- 你可能不知道的 JavaScript 中数字取整
网上方法很多,标题党一下,勿拍 ^_^!实际开发过程中经常遇到数字取整问题,所以这篇文章收集了一些方法,以备查询. 常用的直接取整方法 直接取整就是舍去小数部分. 1.parseInt() parse ...
- JavaScript 系列--JavaScript一些奇淫技巧的实现方法(三)数字取整,数组求和
一.前言 简短的sleep函数,获取时间戳:https://www.mwcxs.top/page/746.html 数字格式化 1234567890 --> 1,234,567,890:argr ...
- python中的数字取整(ceil,floor,round)概念和用法
python中的数学运算函数(ceil,floor,round)的主要任务是截掉小数以后的位数.总体来说 就是取整用的.只是三者之间有微妙的区别: floor() :把数字变小 ceil() : ...
- javascript高逼格代码实现数组去重,JSON深度拷贝,匿名函数自执行,数字取整等
1.如何装逼用代码骂别人傻逼 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] 2.如何优雅的用代 ...
- js玩转数字----取整,四舍五入,数字字符串转换
取整: 向下取整Math.floor(),向上取整Math.ceil(),四舍五入Math.round()),保留有效数位n.toFixed(),产生大于等于0小于1的随机数Math.random() ...
- Oracle的取整和四舍五入函数——floor,round,ceil,trunc使用说明
Oracle的取整和四舍五入函数——floor,round,ceil,trunc使用说明 FLOOR——对给定的数字取整数位SQL> select floor(2345.67) from dua ...
- 问题:oracle floor;结果:Oracle的取整和四舍五入函数——floor,round,ceil,trunc使用说明
Oracle的取整和四舍五入函数——floor,round,ceil,trunc使用说明 (2011-04-06 16:10:35) 转载▼ 标签: 谈 分类: 渐行渐远 FLOOR——对给定的数字取 ...
- js 为何范围内随机取整要用floor,而不是ceil或者round呢
壹 ❀ 引 我在如何使用js取任意范围内随机整数这篇博客中,列举并分析了取[n,m)与[n,m]范围内整数的通用方法,并在文章结果留了一个疑问:为什么通用方法中取整操作,我们使用Math.floor ...
- JS 将数值取整为10的倍数
问题描述: 将数值处理为 10 的倍数,并支持向上或者向下取整 如将 2345 可以处理为 2300 | 2400 | 3000 | 2000 解决方案: /** * 将数字取整为10的倍数 * @p ...
随机推荐
- Mysql 多表连接查询 inner join 和 outer join 的使用
JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接.这里描述先甩出一张用烂了的图,然后插入测试数据. 首先先列举本篇用到的分类(内连接,外连接,交 ...
- 从一道题浅说 JavaScript 的事件循环
最近看到这样一道有关事件循环的前端面试题: //请写出输出内容 async function async1() { console.log('async1 start'); await async2( ...
- 升级pip3的正确姿势--python3 pip3 update
升级pip3的正确姿势为: pip3 install --upgrade pip 而不是 pip3 install --upgrade pip3
- Awesome Go精选的Go框架,库和软件的精选清单.A curated list of awesome Go frameworks, libraries and software
Awesome Go financial support to Awesome Go A curated list of awesome Go frameworks, libraries a ...
- IDEA中用mybatis插件生成逆向工程
目录 maven项目 在resources目录下新建generatorConfig.xml文件 在resources目录下新建config.properties文件 运行 maven项目 <?x ...
- Hive(一)—— 启动与基本使用
一.基本概念 Hive用于解决海量结构化日志的数据统计问题. Hive是基于Hadoop的一个数据仓库工具.本质是将HQL(Hive的查询语言)转化成MapReduce程序. HIve处理的数据存储在 ...
- docker_基础用法
1. docker architecture 2. 命令
- css3学习之--transition属性(过渡)
一.理解transition属性 W3C标准中对CSS3的transition是这样描述的: CSS的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击,获得焦 ...
- 菜鸟学IT之分布式文件系统
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3310 1.目录操作 在HDFS中为hadoop用户创建一个用户目录(had ...
- pypy安装与使用
首先安装pypy环境: yum install pypy -y yum install pypy-devel -y 然后安装pypy的pip:wget https://bootstrap.pypa.i ...