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。

 

 

转载于:https://www.cnblogs.com/fengziwu/p/11175105.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
### 回答1: 好的,关于dataframe取整,您可以使用round方法将DataFrame中的数值四舍五入到指定的小数位数。例如:df.round(2)将DataFrame中的所有数值保留两位小数。希望能够帮到您。 ### 回答2: 在Python的pandas库中,可以使用round()函数来对DataFrame中的数据进行取整操作。 假设有一个DataFrame数据如下: ``` import pandas as pd data = { 'A': [1.5, 2.7, 3.2], 'B': [4.1, 5.6, 6.9] } df = pd.DataFrame(data) ``` 可以使用round()函数对DataFrame中的数据进行四舍五入取整: ``` df_rounded = df.round() ``` 运行结果如下: ``` A B 0 2 4 1 3 6 2 3 7 ``` 此时DataFrame中的每个元素都被四舍五入取整。 除了使用round()函数,还可以使用其他函数对DataFrame中的数据进行取整操作,例如: - ceil()函数:向上取整,返回不小于每个元素的最小整数; - floor()函数:向下取整,返回不大于每个元素的最大整数; - trunc()函数:截断取整,返回每个元素的整数部分。 以上是对DataFrame整体进行取整操作的方法,还可以对DataFrame的特定列进行取整,只需要在函数中指定需要取整的列名即可。 总而言之,通过pandas库提供的取整函数,可以方便地对DataFrame中的数据进行取整操作。 ### 回答3: DataFrame取整可以使用round方法。round方法可以将DataFrame中的所有元素四舍五入为指定小数位数的整数或者指定的有效数字位数。 具体步骤如下: 1. 首先,通过导入pandas库来创建DataFrame。可以使用pandas中的DataFrame()函数来创建一个空的数据框。 2. 将数据赋值给DataFrame中的各列。可以通过DataFrame的列索引来指定每一列的名称,然后将数据以列表的形式赋值给每一列。 3. 使用DataFrame的round()方法将DataFrame中的所有元素取整。可以通过指定参数decimals来设置保留的小数位数。如果没有指定该参数,则默认使用0,表示取整到整数。 4. 输出取整后的DataFrame。 以下是示例代码: ``` import pandas as pd # 创建空的数据框 df = pd.DataFrame() # 添加数据 df['A'] = [1.23, 4.56, 7.89] df['B'] = [9.87, 6.54, 3.21] # 取整 df_round = df.round(decimals=0) # 输出结果 print(df_round) ``` 运行上述代码,输出结果如下: A B 0 1 10 1 5 7 2 8 3 以上结果是将DataFrame中的所有元素都四舍五入取整到整数位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值