[AS3.0] 解决Number类型计算不精确问题
看下面代码运行结果:
trace(256.08+123.1); //379.17999999999995
trace(256.08-123.11); //132.96999999999997
trace(8.4*0.112); //0.9408000000000001
AS3的Number与JAVA或C++的double类似,采用二进制分数而非十进制分数保存浮点部分,因此会导致不够精确。这是语言的设计思路所致。当然,从另一个思路看,实际上它就是个BUG。
为了必须定需求,只好曲线救国:
/**
* 解决计算Number数据不精确问题
* @param n1 值1
* @param n2 值2
* @param operation 运算符 (+ - * )除法应该不存在这个问题;
*/
function numberCalculate(n1:Number,n2:Number,operation:String):Number
{
var len1:int = getNumberFixed(n1);
var len2:int = getNumberFixed(n2);
var len:int = Math.max(len1,len2);
var s:String = "1";
for (var i:int = 0; i<len; i++)
{
s += "0";
}
var level:int = int(s);
var result:Number;
switch (operation)
{
case "+" :
result = (n1*level+n2*level)/level;
break;
case "-" :
result = (n1*level-n2*level)/level;
break;
case "*" :
result = ((n1*level)*(n2*level))/(level*level);
break;
}
return result;
}
/**
* 获取Number数值的小数位数
* return int
*/
function getNumberFixed(n:Number):int
{
var s:Array = n.toString().split(".");
if (s.length == 2)
{
return s[1].length;
}
return 0;
}
测试结果:
trace(numberCalculate(256.08,123.1,"+")); //379.18
trace(numberCalculate(256.08,123.11,"-")); //132.97
trace(numberCalculate(8.4,0.112,"*")); //0.9408
[AS3.0] 解决Number类型计算不精确问题的更多相关文章
- 转载:as3.0下对象类型返回值与变量默认值的详细说明
转自:http://www.cuplayer.com/player/PlayerCodeAs/2012/0905367.html Null.NaN.undefined 及各自应用对象:变量的默认值: ...
- Oracle Number类型超长小数位为0问题
碰到了一个非常奇怪的问题,从Excel拷贝出来的数据,位数很长,通过Pl Sql 导出到Oracle后为0了,而且设置查询条件为0时,无法查询出来,条件大于0居然能查询出来,通过to_number也是 ...
- ORACLE NUMBER类型Scale为0引发的问题
今天遇到了一个很有意思的NUMBER类型Scale引发的问题,我用一个简单的测试用例来展示一下这个案例.假如有个TEST的表,有个字段类型为NUMBER,我插入下面两条数据 CREATE TABLE ...
- 给Number类型增加加法、减、乘、除函数,解决float相加结果精度错乱的问题
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 解决input为number类型时maxlength无效的问题
使用input数字number类型的时候maxlength无效,假设需要控制输入数量为18,可以用以下方式: 无效: <input type="text" maxlengt ...
- 解决input,number类型的maxlength无效
使用input数字number类型的时候maxlength无效,假设需要控制输入数量为5,可以用以下方式: 无效: <input type="text" maxlength ...
- 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...
- [转]AS3 int uint Number
转自:http://luhantu.iteye.com/blog/1910301 AS3 int uint Number 博客分类: AS3 flex number 类型 1) int 类可使用表示 ...
- Java中的Double类型计算
一.问题的提出: 如果我们编译运行下面这个程序会看到什么?public class Test{ public static void main(String args[]){ Sy ...
随机推荐
- Xpath解析xml
Xpath解析xml其实最主要的是查找xml文档中信息,而且不需要了解xml文档结构 package com.huawei.xml; import java.io.InputStream;import ...
- Kubernetes集群的安装部署
此文参照https://www.cnblogs.com/zhenyuyaodidiao/p/6500830.html,并根据实操过程略作修改. 1.环境介绍及准备: 1.1 物理机操作系统 物理机操作 ...
- 【hdu4347】The Closest M Points 【KD树模板】
题意 一个k维空间,给出n个点的坐标,给出t个询问,每个询问给出一个点的坐标和一个m.对于每个询问找出跟这个点最接近的m个点 分析 kd树的模板题. #include <cstdio> # ...
- Debian 如何使用测试版更新软件包到最新的版本
#vim /etc/apt/sources.list 将版本代号替换成 testing 然后更新,应可以安装最新的软件包了.
- 看图说话:关于BI那点事儿
[编者按]BI=DW+数据挖掘+业务分析+社会学?BI三部曲:管数据.看数据.源数据.BI有三种放法:技术部.业务部和独立部门.BI的工作=20%数据平台+30%数据支持+50%数据应用.
- Gym 101201I Postman (贪心)
题意:有个邮递员,要送信,每次最多带 m 封信,有 n 个地方要去送,每个地方有x 封要送,每次都到信全送完了,再回去,对于每个地方,可以送多次直到送够 x 封为止. 析:一个很简单的贪心,就是先送最 ...
- linux计划任务(二)
计划任务的授权 1.at任务 /etc/at.allow /etc/at.deny 2.crontab任务 /etc/cron.allow /etc/cron.deny [注:如果allow文件存在, ...
- RECONSUME_LATER
Failure consumption,later try to consume. ================MessageExt [queueId=0, storeSize=134, queu ...
- mongo find
MongoVUE 对应成语句,结构如下: db.logs.find({ "message" : /消息/ }, { "message" : 1 }).limit ...
- Postgresql 用户管理
一, 设置超级用户密码 1 修改 pg_hba.conf 使超级用户postgres 可以登录到数据库中 host all all 127.0.0.1/32 trust 2 修改 postgres ...