给Number类型增加加法、减、乘、除函数,解决float相加结果精度错乱的问题
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script type="text/javascript">
//给Number类型增加 加法函数
Number.prototype.add = function (arg) {
var l1 = this.toString().indexOf('.') > 0 ? this.toString().split(".")[1].length : 0,
l2 = arg.toString().indexOf('.') > 0 ? arg.toString().split(".")[1].length : 0,
pw = Math.pow(10, Math.max(l1, l2));
return (arg * pw + pw * this) / pw;
};
//给Number类型增加 减法函数
Number.prototype.sub = function (arg) {
var l1 = this.toString().indexOf('.') > 0 ? this.toString().split(".")[1].length : 0,
l2 = arg.toString().indexOf('.') > 0 ? arg.toString().split(".")[1].length : 0,
pw = Math.pow(10, Math.max(l1, l2)),
//动态控制精度长度
l = (l1 >= l2) ? l1 : l2;
return ((this * pw - arg * pw) / pw).toFixed(l);
}
//给Number类型增加 乘法函数
Number.prototype.mul = function (arg) {
var pw = 0;
pw += this.toString().indexOf('.') > 0 ? this.toString().split(".")[1].length : 0;
pw += arg.toString().split(".")[1].length > 0 ? arg.toString().split(".")[1].length : 0;
return Number(arg.toString().replace(".", "")) * Number(this.toString().replace(".", "")) / Math.pow(10, pw);
}
//给Number类型增加 除法函数
Number.prototype.div = function (arg) {
var l1 = this.toString().indexOf('.') > 0 ? this.toString().split(".")[1].length : 0,
l2 = arg.toString().indexOf('.') > 0 ? arg.toString().split(".")[1].length : 0;
with (Math) {
r1 = Number(this.toString().replace(".", ""));
r2 = Number(arg.toString().replace(".", ""));
return (r1 / r2) * pow(10, l2 - l1);
}
}
/*加法函数 调用实例*/
var testadd = [1.123, 2.456, 3.456, 4, 5, 6, 7, 8, 9, 0];
console.log(testadd[0].add(testadd[1])); //3.579
console.log(1.123 + 2.456); //错误对比:3.5789999999999997 var count = 0;
for (i in testadd)
count = count.add(testadd[i]);
console.log(count); //46.035
console.log('加法函数 调用实例'); /*减法函数 调用实例*/
var testsub = [1.123, 2.456, 3.456, 4, 5, 6, 7, 8, 9, 0];
console.log(testsub[1].sub(testsub[0])); //1.333 console.log(testsub[1].sub(testsub[2])); //-1.000
console.log(2.456 - 3.456); //小数对比:-1
console.log('减法函数 调用实例'); /*乘法函数 调用实例*/
var testmul = [1.123, 2.456, 3.456, 4, 5, 6, 7, 8, 9, 0];
console.log(testmul[1].mul(testmul[2])); //8.487936
console.log(2.456 * 3.456); //8.487936
console.log('乘法函数 调用实例'); //乘法函数 调用实例
var testdiv = [1.123, 2.456, 3.456, 4, 5, 6, 7, 8, 9, 0];
console.log(testdiv[1].div(testdiv[2])); //0.7106481481481481
console.log(2.456 / 3.456); //0.7106481481481481
console.log('乘法函数 调用实例');
</script>
</head>
<body> </body>
</html>
给Number类型增加加法、减、乘、除函数,解决float相加结果精度错乱的问题的更多相关文章
- Oracle数据库中NARCHAR转换成NUMBER类型
1.修改后的代码: public void addDirectorActorKeyword(long idStart, long idEnd) { SeriesMgr seriesMgr = new ...
- ORACLE 中NUMBER 类型 低精度转换成高精度
例如: 表User中有一个字段 salary Number(10,3), 如果想把字段salary的类型提高精度到salary Number(10,6),保留六位小数, 解决办法:1,ALTER ...
- JS数据类型之Number类型
Number类型的转换及方法 var num = 10; num.toString() //"10"转字符串,参数表示几进制 num.toFixed(2) //10.00 自动舍入 ...
- [20191003]oracle number类型存储转化脚本.txt
[20191003]oracle number类型存储转化脚本.txt --//完善脚本,增加支持科学记数法.比如1e4之类的写法. 2.测试:$ cat test.txt012251234100-4 ...
- html5 input number类型使用整理
一. html5 input中的数字number类型, 只能输入整数,如果要输入浮点数呢,可以通过max.min和step去定义. type="number" 数字类型 mi ...
- ORACLE NUMBER类型Scale为0引发的问题
今天遇到了一个很有意思的NUMBER类型Scale引发的问题,我用一个简单的测试用例来展示一下这个案例.假如有个TEST的表,有个字段类型为NUMBER,我插入下面两条数据 CREATE TABLE ...
- javascript学习笔记2-typeof、Number类型、Boolean()
1.typeof操作符 对一个值使用typeof操作符可能返回下列某个字符串 "undefined"——这个值未定义 "boolean"——这个值是布尔值 &q ...
- oracle中的number类型
number 数据类型 number (precision,scale) a) precision表示数字中的有效位,如果没有指定precision的话,oracle将使用38作为精度: b) ...
- Date类型,Boolean类型,Number类型
1.Date类型: 1)创建Date对象: var date=new Date(); //Date对象会把当前日期和时间保存为其初始值 2)Date对象的方法: --这些得到的都是数字 ...
随机推荐
- Java将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
java.io 类 BufferedWriter java.lang.Object java.io.Writer java.io.BufferedWriter BufferedWriter publi ...
- Android 网络开发免费API接口
http://www.juhe.cn/ 聚合数据 目前很多接口都收费 https://www.showapi.com ...
- PHP会话处理相关函数介绍
PHP会话处理相关函数介绍 提交 我的评论 加载中 已评论 PHP会话处理相关函数介绍 2015-03-23 PHP100中文网 PHP100中文网 PHP100中文网 微信号 功能介绍 互联网开发者 ...
- Maven 跳过测试命令行参数 skip test
mvn package -Dmaven.test.skip=true
- NoSQL精粹(NoSQL Distilled)——序言
之前说到博客长草的问题,想了想除了很忙特别忙非常忙各种瞎忙忙你妹啊外,主要还是不知道写什么好--到这家公司的两年中从JS到领域驱动到缓存服务器从前端到后端各种折腾,有些东西虽然有所心得,不过既然前人已 ...
- ORACLE之UTL_FILE包详解
1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录. 方法: ...
- ASP.NET Web API 跨域访问
自定义特性 要在WebApi中实现JSONP,一种方式是实现自定义特性 http://stackoverflow.com/questions/9421312/jsonp-with-asp-net-w ...
- 收缩SQL Server日志不是那么简单的(翻译)
原文地址:http://rusanu.com/2012/07/27/how-to-shrink-the-sql-server-log/ 说明:本文为了更好的说明收缩的过程,在原文翻译的基础上增加了一些 ...
- windows下安装mysql压缩包版[转]
版本:5.6.17 1.将解压后的文件夹放到某个目录下,比如c:\software; 2.在环境变量中新建MYSQL_HOME=C:\software\mysql-5.6.17-winx64,然后在系 ...
- GCD使用dispatch_group_notify、dispatch_group_enter、dispatch_group_leave处理多线程同步操作
一.简介 dispatch_group_enter:通知group,下面的任务马上要放到group中执行了. dispatch_group_leave:通知group,任务完成了,该任务要从group ...