给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对象的方法: --这些得到的都是数字 ...
随机推荐
- HTML回顾
<frameset>和<body>是同一级的,已经在html5中被弃用 结合----> 效果 注意::::span标签不自动换行****
- VS2013_QT255开发相关技巧理解心得
1. 在VS2013中打开QTCreater新建的项目 (1)通过双击.ui 打开QT的设计器,然后修改. (2)通过QT设计器,新建ui文件,放在VSQT的工程中 但是需要对此xxx.ui文件,进行 ...
- 高性能的数据压缩库libzling
libzling(https://github.com/richox/libzling)是一款高性能的数据压缩库,在压缩时间和压缩率上都超过了流行的zlib/gzip.libzling使用的是ROLZ ...
- Android 开源项目维护者宣布退出
Android开源项目(Android Open Source Project,AOSP)的长期维护者Jean-Baptiste Quéru在Google+上宣布退出,他退出AOSP项目的原因被认为与 ...
- Windows 10 技术预览
windows10的技术预览版已经发布了很久了,正式版大约在今年的夏天就会发布,作为微软寄予厚望的下一代全平台操作系统,相比于windows8.1,windows10做了哪些改进,又添加了哪些新功能. ...
- Vue.js双向绑定的实现原理和模板引擎实现原理(##########################################)
Vue.js双向绑定的实现原理 解析 神奇的 Object.defineProperty 这个方法了不起啊..vue.js和avalon.js 都是通过它实现双向绑定的..而且Object.obser ...
- atitit.表格的绑定client side 最佳实践
atitit.表格的绑定client side 最佳实践 1. 框架选型 1 2. #---原理和流程 1 1. 方法1 1 2. Dwr 例子 1 3. 方法2 2 4. Jq例如 2 1. 框架选 ...
- iOS开发---集成百度地图,位置偏移问题
iOS 集成百度SDK 请参考 百度地图官方文档 ,这里不就多啰嗦了 本文介绍的是在百度地图上根据经纬度,自定义气泡时,气泡位置的偏移,在我们天朝这种事是很常见的,也见怪不怪了,在项目中使用的百度地图 ...
- 解决 Android Studio 乱码问题
http://www.eoeandroid.com/thread-275485-1-1.html 很多同学都安装了Android Studio,但是发现中文是乱码,其实这个很好解决的.在IDE里点击F ...
- Redis+Django(Session,Cookie)的用户系统
一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...