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 ...
随机推荐
- Linux路径与Win路径的转换
cygpath $ cygpath -p "$WinPath" -u LinuxPath $ cygpath -p "$LinuxPath" -w WinPat ...
- 树莓派的系统安装,并且利用网线直连 Mac 进行配置
最近单位给了我一个新的树莓派3B+让我自己玩.下面是我记录的我如何安装 Raspbian Stretch Lite 系统,然后如何成功不用独立显示屏而利用 MacBook 对其进行配置. 安装 Ras ...
- J.U.C-三剑客[semaphore\CyclicBarrier\CountDownLatch]
一.semaphore信号量,底层也是基于AQS 使用: /** * 可以理解为控制某个资源最多有多少个线程同时执行,(比如洗手间,并行与排队) * 如果满了只能等待直到其它资源释放(可以理解为并发量 ...
- app每次更新版本时调用js代码提示用户下载更新
var url = '网络地址'; //APP升级 var wait; function update(){ //判断操作系统 var system = 'android'; if(mui.os.io ...
- 【6】学习C++之类的实例化及访问
类就像一张图纸,如果不去实例化,制造出相应的零件,用处就不会那么大. 实例化类有两种,一个是从栈中实例化对象: class TV { public: ]; int type; void changeV ...
- 上传Jcenter
将自己封装的库发布分享到Jcenter
- STL--sort源码分析
SGI STL sort源码 temlate <class RandowAccessIterator> inline void sort(RandowAccessIterator firs ...
- jQuery新版本没有了Toggle事件,两个按钮分别控制隐藏显示,同时这两个按钮点击也要互斥。
十二月没来得及整理发布,一直在草稿箱.现在已经2019年1月了... 需求大概是这样的 //XX点击事件 var flagBar = 0; $("#doNotBaseRate"). ...
- spring mybatis mysql 事务不起作用
之前框架事务应该是好的,不过这次做了些修改,不知如何竟然不好用了,整理了好半天,java框架配置就是吓人,有一点不熟悉的就可能暴露问题,好处是又深入的了解了配置原理. 开始以为是mysql不支持事务的 ...
- python使用正则解析网络地址的各个部分
参考文章: https://www.cnblogs.com/ingd/p/6182571.htmlimport re def resolveAddress(url): ""&quo ...