给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对象的方法: --这些得到的都是数字 ...
随机推荐
- [fn]焦点图JQ插件版
自己写的焦点图片的插件,使用方法简单说明一下 index.html页面具体结构如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Trans ...
- [2011山东ACM省赛] Sequence (动态规划)
Sequence Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Given an integer number sequence ...
- iOS push过去的时候界面不能完全退出
iOS push过去的时候界面不能完全退出 解决方法:设置self.view.backgroundcolor 1. initWithFrame方法是什么? initWithFrame方法用来初始化并 ...
- PROTEL DXP原理图编译 常见错误与处理方法
一, [Warning] AUDIO.SCH Extra Pin R509-1 in Normal of part R509 [Warning] AUDIO.SCH Extra Pin R5 ...
- innodb_ft_max_token_size取值范围
根据问档中所说,innodb_ft_max_token_size取值范围为10-252,而实际上但我们在配置文件设置innodb_ft_max_token_size=252时,error log会出现 ...
- WP8:Unity3D之间的值传递
在前面的讨论中,我们介绍了如何在Unity3D for WP8中使用高于.Net 3.5的第三方库,传送门:http://www.cnblogs.com/zhxilin/p/3311240.html ...
- jqPlot图表插件学习之饼状图和环状图
一.准备工作 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载对应的js和css(因为笔者在VS2 ...
- 使用NHibernate(9)-- 缓存
1,对象状态. 作为基础,还是先看一下对象的状态吧.主要涉及到三个名词,瞬时.持久.托管. 瞬时态:对象刚创建,Session还不知道这个对象的存在.可以通过调用ISession的Save等方法可以转 ...
- Django表单验证
从前端提交的各种数据可能存缺少必要字段以及包含非法数据等问题, 并且通常需要进行类型转换后才可以交由业务逻辑处理. 我们当然可以在控制器(Django的views函数)中完成这些工作, 但是这样会使控 ...
- iOS——Command-Line 查看当前SDK版本并修改默认SDK版本
在工作中可能会碰到用命令行编译.打包iOS应用程序的情况(xcodebuild相关命令). 但是由于SDK版本问题,会报错,说某SDK版本不对,可能是因为升级Xcode导致的SDK版本升级,为了避免高 ...