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 ...
随机推荐
- SaltStack 介绍和安装
SaltStack 介绍和安装 SaltStack 介绍 SaltStack是一种利用Python语言开发的,用于批量管理主机的一套工具,主要实现三种功能: 远程执行:通过saltstack工具,可以 ...
- 状压dp(状态压缩&&dp结合)学习笔记(持续更新)
嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的 ...
- Leetcode经典试题:Longest Substring Without Repeating Characters解析
题目如下: Given a string, find the length of the longest substring without repeating characters. Example ...
- ajax跨域例子
例子 https://github.com/ruanyf/react-demos/blob/master/demo12/index.html 此网页代码运行在本地, 是可以访问 github 数据的. ...
- python中的图像数据库PIL
from PIL import Image im = Image.open("图片路径") im.function() 常用的函数: 1.im.crop(x,y,x1,y1) 对图 ...
- 环境判断:区别h5打开还是weixin打开?
var source_platform = '' , pf_source = 2; //系统平台 //区别是否是 微信浏览器 , source_platform 系统平台 2018.12.6新增 va ...
- 用SQL表达连接与外连接
关系代数运算中,有连接运算,又分为θ连接和外连接 标准SQL语言中连接运算通常是采用 SELECT 列名[[,列名]...] FROM 表名1,表名2,... WHERE 检索条件; SQL的高级语法 ...
- redis集群配置与管理
Redis在3.0版本以后开始支持集群,经过中间几个版本的不断更新优化,最新的版本集群功能已经非常完善.本文简单介绍一下Redis集群搭建的过程和配置方法,redis版本是5.0.4,操作系统是中标麒 ...
- python 中 dlib库的安装
安装 dlib 库的时候需要用到 CMake 进行本地编译,而Cmake又是基于Visual Studio运行的,我在装这个库的时候,各种找不到教程,就想着分享一下自己的经验. 32位 python3 ...
- kafka 重新分配partition
登陆kafka manager 进入相关topic 点击generate partition assignments 点击reassign partirons