js浮点数的加减乘除
;(function(root, factory) {
// Support AMD
if (typeof define === 'function' && define.amd) {
define([], factory);
// Support CommonJS
} else if (typeof exports === 'object') {
var accFloating = factory();
// Support NodeJS & Component, which allow module.exports to be a function
if (typeof module === 'object' && module && module.exports) {
exports = module.exports = accFloating;
}
// Support CommonJS 1.1.1 spec
exports.accFloating = accFloating;
// Support vanilla script loading
} else {
root.accFloating = factory();
}
}(this, function() {
/**
* 获取小数点后数字长度
* @author zhongjiewang
* @param {Number} num 数字
* @return {Number} 长度
*/
function decimalLength(num) {
var str = num.toString();
var index = str.indexOf('.');
return index == -1 ? 0 : str.substr(index + 1).length;
}
/**
* 小数点后补齐0作为整数
* @author zhongjiewang
* @param {Number} num 数字
* @param {Number} length 补齐的长度
* @return {Number} 整数
*/
function suffixInteger(num, length) {
var str = num.toString();
var decimalLen = decimalLength(num);
str += Math.pow(10, length - decimalLen).toString().substr(1);
return Number(str.replace('.', ''));
}
// 加法
function accAdd(num1, num2) {
var r1 = decimalLength(num1);
var r2 = decimalLength(num2);
var max = Math.max(r1, r2);
var n1 = suffixInteger(num1, max);
var n2 = suffixInteger(num2, max);
return Number(((n1 + n2) / Math.pow(10, max)).toFixed(max));
}
// 减法
function accSubtr(num1, num2) {
var r1 = decimalLength(num1);
var r2 = decimalLength(num2);
var max = Math.max(r1, r2);
var n1 = suffixInteger(num1, max);
var n2 = suffixInteger(num2, max);
return Number(((n1 - n2) / Math.pow(10, max)).toFixed(max));
}
// 乘法
function accMul(num1, num2) {
var r1 = decimalLength(num1);
var r2 = decimalLength(num2);
var max = Math.max(r1, r2);
var n1 = suffixInteger(num1, max);
var n2 = suffixInteger(num2, max);
return n1 * n2 / Math.pow(10, max * 2);
}
// 除法
function accDiv(num1, num2) {
var r1 = decimalLength(num1);
var r2 = decimalLength(num2);
var max = Math.max(r1, r2);
var n1 = suffixInteger(num1, max);
var n2 = suffixInteger(num2, max);
return n1 / n2;
}
return {
add: accAdd,
subtr: accSubtr,
mul: accMul,
div: accDiv
}
}));
js浮点数的加减乘除的更多相关文章
- JS浮点数的加减乘除运算
文章来源地址:http://blog.csdn.net/lyd518/article/details/7236464 转载请注明出处,尊重作者劳动成果,谢谢!问题这样的: 37.5*5.5=206.0 ...
- 关于js浮点数计算精度不准确问题的解决办法
今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一直碰到这个问题,都是简单的使用tofixed方法进行处理一下,这对于一个程序员来说是及其不严谨的.因此在网上收集了一些处理浮点数精 ...
- js浮点数乘除法
JS在处理浮点数计算时经常会遇到精度的问题,上一篇博客封装了JS浮点数加减法的方法,这一次来封装一下js浮点数乘除法运算. 其实浮点除法的封装跟加减法的封装原理是一样,只是在第一次计算完后会再复位小数 ...
- 学以致用:手把手教你撸一个工具库并打包发布,顺便解决JS浮点数计算精度问题
本文讲解的是怎么实现一个工具库并打包发布到npm给大家使用.本文实现的工具是一个分数计算器,大家考虑如下情况: \[ \sqrt{(((\frac{1}{3}+3.5)*\frac{2}{9}-\fr ...
- js 浮点数陷阱
众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004.1-0.9=0. ...
- js浮点数计算问题 + 金额大写转换
一 js浮点数计算问题解决方案: 1.使用 NumberObject.toFixed(num) 方法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 2.较精度计算浮点数 ...
- JS浮点数运算BUG破法
JS里,0.3*3 = 0.8999999999999999 破法1:((0.3*10)*3)/10 破法2:(0.3*3).toFixed(2)//保留两位小数 原因:js浮点数用的是IEEE754 ...
- js浮点数的计算
js在计算浮点数时可能不够准确,会产生舍入误差的问题,这是使用基于IEEE745数值的浮点计算的通病,并非ECMAScript一家,其他使用相同数值格式的语言也存在这个问题. 这里讲一 ...
- JS浮点数运算Bug
JS浮点数运算Bug的解决办法(转) 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.0849999 ...
随机推荐
- 【深度学习】RNN | GRU | LSTM
目录: 1.RNN 2.GRU 3.LSTM 一.RNN 1.RNN结构图如下所示: 其中: $a^{(t)} = \boldsymbol{W}h^{t-1} + \boldsymbol{W}_{e} ...
- 洛伦兹曲线(Lorenz curve)提升指数、提升表和提升图
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...
- java基础-容器-Set
Set:set不存重复元素,如果是使用set存储java预定义的Integer,String等类型会很简单,如果是存储自定义类型的数据类型,就必须要重新定义equals()方法以确保set中保存的对象 ...
- Git复制已有分支到新分支开发
如果我们需要在现有的分支代码基础上,复制代码到新分支进行开发,并推送至远程仓库,可以进行如下操作: 注:被复制的分支代码(ibis35),创建新的分支(ibis35-dev) 1. 切换到被copy的 ...
- JS 获取本月第一天零点时间戳并转化成yy-mm-dd
JS 获取本月第一天零点时间戳并转化成yy-mm-dd 格式 <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- Kindle复活记
此前,2015年为了配合拆机堂的内容项目,我们将全新Kindle PaperWhite 3进行全球首拆,让网友们第一时间全面了解了Kindle PaperWhite 3的内部构造.但由于进行深度拆解, ...
- asp.net core NLog将日志写到文件
1.安装Nlog包 Install-Package NLog.Extensions.Logging -Pre 2.在项目添加nlog.config文件 2.1.nlog.config <?xml ...
- mac charles手机抓包详细教程
1.官方下载charles 2.查看电脑IP地址 3.Proxy>Proxy Settings>勾选 Enable transparent HTTP proxying (记住端口号 88 ...
- net core appsetting配置
public class BaseController : Controller { protected WLEntity _db; protected ILogger _log; protected ...
- Spring框架-IOC和AOP简单总结
参考博客: https://blog.csdn.net/qq_22583741/article/details/79589910 1.Spring框架是什么,为什么,怎么用 1.1 Spring框架是 ...