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 ...
随机推荐
- Ceph mimic
环境 系统:Centos 7(系统最小化安装)版本:Ceph mimic 系统配置 配置主机名hostname.hosts.关闭firewalld.ssh无密码登录.ntp时间同步等,过程略. 保存下 ...
- Linux 配置代理
在我们账号的home那有一个.bashrc文件,用来设置一些开机运行的bash命令 cd ~ ls -a vi .bashrc 我们可以在这里添加代理 export http_proxy=" ...
- netty的基本介绍
一.什么是netty?为什么要用netty netty是jboss提供的一个java开源框架,netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可用性的网络服务器和客户端程 ...
- Python 中使用 matplotlib 绘图中文字符显示异常的问题
最近在使用 Python matplotlib 绘制图表时发现中文字符不能正确显示:比如在绘制折线图时,中文全部显示成▢▢▢的格式,虽然将数据改成英文就没什么问题,但是所有数据都这么做时不可行的,于是 ...
- Ubuntu18.04格式化U盘为NTFS的方法
1.先安装工具ntfs-3g sudo apt-get install ntfs-3g 2.找到需要格式化的U盘在系统中的序号 df -h 找到U盘的序列号后记下来,例如“/dev/sdd1” 3.解 ...
- slim.arg_scope中python技巧
slim.arg_scope函数说明如下: Stores the default arguments for the given set of list_ops. For usage, please ...
- spring对bean的管理细节
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- Apple Tree POJ - 2486 (树形dp)
题目链接: D - 树形dp POJ - 2486 题目大意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走V步,最多能遍历到的权值 学习网址:https://blog.c ...
- java 日常学习记录-反射
Hero类 package helloworld; public class Hero { public String name; //姓名 public float hp; //血量 public ...
- VS2017 性能优化方法
原文地址:https://www.cnblogs.com/mahatmasmile/p/10394168.html 出处1:https://docs.microsoft.com/zh-cn/visua ...