JS加减乘除位移方法封装

2023-11-12

常用加减乘除等方法汇总

直接上代码,逻辑简单,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Math Methods</title>
</head>
<body>
    <div id="div">加减乘除位移方法汇总</div>
<script type="application/javascript">
    /**
     * 向右移动小数点 ,相当于乘10的_pointcount次幂
     * @param _number 操作的数字
     * @param _pointcount 向右移动的位数
     * @returns 移动以后的数字(number类型)
     */
    var moveRight = function (_number, _pointcount) {
        if (Number(_number) !== Number(_number)) {
            return _number;
        }
        var flag = 1;
        if (_number < 0) {
            flag = -1;
            _number = _number * -1;
        }
        var numStr = _number.toString();
        var strArr = numStr.split(".");
        var rightStr = strArr.length > 1 ? strArr[1] : "";
        //在不足移动的位数后补0;
        if (rightStr.length < _pointcount) {
            var addZero = [];
            for (var i = rightStr.length; i < _pointcount; i++) {
                addZero.push("0");
            }
            rightStr = rightStr + addZero.join("");
        }
        return Number(strArr[0] + rightStr.substring(0, _pointcount) + "." + rightStr.substr(_pointcount)) * flag;
    };
    /**
     * 向左移动小数点,相当于_number除以10的_pointcount次幂
     * @param _number 操作的数字
     * @param _pointcount 向左移动的位数
     * @returns 移动以后的数字(number类型)
     */
    var moveLeft = function (_number, _pointcount) {
        //判断是否为数字,非数字直接返回本身
        if (Number(_number) !== Number(_number)) {
            return _number;
        }
        var flag = 1;
        if (_number < 0) {
            flag = -1;
            _number = _number * -1;
        }
        //number转换为string ,方便后续操作。
        var numStr = _number.toString();
        //按照小数点分隔字符串,
        var strArr = numStr.split(".");
        var num = 0, zeroArr = [];
        //生成移动位数+1的0 ,补到分隔后的第一个字符串中,兼容0.XXX的情况。开头多余的零会在调用Number方法时去掉。
        while (num < _pointcount + 1) {
            zeroArr.push("0");
            num++;
        }
        var leftStr = zeroArr.join("") + strArr[0];
        var leftArr = leftStr.split("")
        //插入移动后的小数点。
        leftArr.splice((leftStr.length - _pointcount), 0, '.');
        var result = leftArr.join("");
        //拼接原始值小数点后的数字
        if (strArr.length > 1) {
            result += strArr[1];
        }
        return Number(result) * flag;
    };
    /**
     * 加法
     * @param _num1
     * @param _num2
     * @param precision 精度
     * @returns {*}
     */
    var add = function (_num1, _num2, precision) {
        if (!precision) {
            precision = 2;
        }
        return moveLeft(moveRight(_num1, precision) + moveRight(_num2, precision), precision)
    };
    /**
     * 减法
     * @param minuend
     * @param reduction
     * @returns {*}
     */
    var reduce = function (minuend, reduction, precision) {
        if (!precision) {
            precision = 2;
        }
        return moveLeft(moveRight(minuend, precision) - moveRight(reduction, precision), precision)
    };
    /**
     * 乘法
     * @param _num1
     * @param _num2
     * @returns {number}
     */
    var multiplication = function (_num1, _num2, precision) {
        if (!precision) {
            precision = 2;
        }
        return moveLeft(moveRight(_num1, precision) * moveRight(_num2, precision), precision * 2)
    };
    /**
     * 除法
     * @param _num1 被除数
     * @param _num2 除数
     * @param precision 精度 整形,几位小数
     * @returns {number}
     */
    var division = function (_num1, _num2, precision) {
        if (!precision) {
            precision = 2;
        }
        return moveRight(_num1, precision) / moveRight(_num2, precision);
    };
    console.log(moveRight(0.9999999,3));
    console.log(moveLeft(88888888888,2));
    console.log(add(1.01,7.079,8));
    console.log(reduce(8.01,1,2));
    console.log(multiplication(1,8.88,2));
    console.log(division(16,2,2))
</script>
</body>
</html>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS加减乘除位移方法封装 的相关文章

  • 为什么 Math.Round 不返回 int? [复制]

    这个问题在这里已经有答案了 在 C 中 为什么舍入数学函数 Floor Ceiling 和 Round 不返回int 考虑到函数的结果始终是整数 为什么它返回一个float double or decimal double has the
  • 如何在 C# 中将 BigInteger 转换为 pow Double?

    我尝试使用BigInteger Pow计算类似 10 12345 987654321 的方法 但此方法只接受整数作为指数 如下所示 BigInteger Pow BigInteger x int y 那么如何在上述方法中使用双数作为指数呢
  • R 中 if-else 中的逻辑运算符

    我有一个名为 mat 的下表 5 列和 3 行 AC CA RES 1 0 2 2 1 3 0 0 0 1 正在执行的操作是mat 1 mat 1 mat 2 我正在测试以下内容 1 如果一行的两列都为零 则结果应为 NA 2 如果一行中只
  • 小数纬度/经度的最大长度 度?

    地球表面一度纬度和经度的最大长度是多少 以公里或英里为单位 但请注明 我不确定我是否说得足够清楚 让我重新表述一下 众所周知 地球不是一个完美的圆 赤道 或厄瓜多尔 纬度 经度变化 1 0 可能意味着一个距离 而两极的相同变化可能意味着另一
  • 线性问题和非线性问题之间的区别?点积和核技巧的本质

    核技巧将非线性问题映射为线性问题 我的问题是 1 线性问题和非线性问题的主要区别是什么 这两类问题的差异背后的直觉是什么 核技巧如何帮助在非线性问题上使用线性分类器 2 为什么点积在这两种情况下如此重要 Thanks 当人们说到分类问题的线
  • Python OverflowError:数学范围错误[重复]

    这个问题在这里已经有答案了 当我尝试这个计算时 出现溢出错误 output math exp 1391 12694245 100 我知道发生这种情况是因为使用的数字 超出了双精度数的范围 但有什么方法可以解决这个问题并获得输出值 有人可以帮
  • 如何在sphinx中启用数学?

    我在用sphinx http sphinx pocoo org index html与pngmath http sphinx pocoo org ext math html module sphinx ext pngmath扩展来记录我的代
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 在 Python 中使用 sec 函数的反函数

    我正在创建一个程序 用于计算从一定高度范围和设定初始速度发射射弹的最佳角度 在我需要使用的最终方程中 存在一个反 sec 函数 它导致了一些麻烦 我已经导入了数学并尝试使用 asec 无论如何 但是数学似乎无法计算反秒函数 我也明白 sec
  • 如何在编程中表示sqrt(-1)?

    我想代表sqrt 1 在C 中 因为我正在尝试实现FFT算法 有没有好的方法来表示这一点 我猜你正在寻找 include
  • 可被 N 整除的最小正数

    1 如何找到能被N整除的最小正数 并且它的各位数字和应该等于N 例如 N 结果 1 1 10 190 并且算法时间不应超过 2 秒 有什么想法 伪代码 pascal c 或 java 吗 设 f len sum mod 为 bool 这意味
  • 有没有办法根据值是大于 0.5 还是小于 0.5 来进行下限/上限?

    我正在尝试舍入我的价值观 以便如果它是0 5或更大 则变为1 否则就变成0 例如 3 7 gt 4 1 3 gt 1 2 5 gt 3 有任何想法吗 Math Round 3 7 MidpointRounding AwayFromZero
  • 判断一个点是否在直角三角形内

    我一直想知道最简单的方法来确定一个点是否位于三角形内 或者在这种情况下 判断一个点是否位于对角线切成两半的矩形内 假设我有一个 64x64 像素的矩形 对于这个矩形 如果传递的点位于矩形的左上角 我想返回 TRUE 值 否则返回 FALSE
  • JavaScript 或 IEEE-754 中的舍入怪癖?

    我在一个单元测试中遇到了一个奇怪的问题 我在 JavaScript 中得到了意外的舍入结果 2 005 toFixed 2 produces 2 00 2 00501 toFixed 2 produces 2 01 最初我怀疑这只是 Web
  • 加速球之间的碰撞检测

    我正在编写一个物理引擎 模拟器 其中包含 3D 太空飞行 行星 恒星引力 船舶推力和相对论效应 到目前为止 一切进展顺利 但是 我需要帮助的一件事是碰撞检测算法的数学 我使用的运动迭代模拟基本上如下 注意 3D 矢量全部大写 For eac
  • 基本的 Python OpenCV 裁剪和调整大小

    有人可以帮我一些裁剪算法吗 它的 openCV 我想弄清楚这一点 我知道方法是crop image y y1 x x1 如果我有一个带有 new dimensionXxnew dimensionY 像素的图像 并且我想将其裁剪为相同的宽度
  • 在 C 中如何安全地找到 2 个有符号整数之间的绝对差?

    绝对差是两个数字之间差的绝对值 假设我有 2int变量 x and y 我想找到绝对差异 一个简单的解决方案是 unsigned diff abs x y 然而 如果发生溢出 这些会调用未定义的行为并给出不正确的结果 例如x is INT
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅

随机推荐

  • mysql编码设置

    mysql 创建 数据库时指定编码很重要 很多开发者都使用了默认编码 乱码问题可是防不胜防 制定数据库的编码可以很大程度上避免倒入导出带来的乱码问题 网页数据一般采用UTF8编码 而数据库默认为latin 我们可以通过修改数据库默认编码方式
  • spring-mvc Restful风格

    Restful风格 概念 Restful就是一个资源定位及资源操作的风格 不是标准也不是协议 只是一种风格 基于这个风格设计的软件可以更简洁 更有层次 更易于实现缓存等机制 对比 之前controller类的写法 resource文件里存在
  • 创建conda环境配置出现conda env create -f environment.yml报错解决办法

    解决gitub项目conda创建环境environment yml出现的Solving environment failed 和 ResolvePackageNotFound错误的解决办法记录 问题 创建conda环境配置输入 conda
  • unity水特效与标准资源包的下载导入

    由于本个实例需要使用unity的标准资源包 一 方法一 1 进入unity官网 https unity cn 2 点击页面的Beta版本 3 找到对应自己版本下载即可 方法二 在unity中的商店中搜索 Standard Asset下载导入
  • 西门子PLC常用通信协议以及常用协议的区别(一)

    RS232 是硬件接口 描述 是目前最常用的串行通信接口 RS232 C只是表示RS232的版本 简称都是一样的 特性 标准接口采用9针或者25针D型接口 常用的一般是9针接口 因为大部分连接不需要使用对方的传送控制信号 只需要三条线 即发
  • 2020Unity中文项目用Vs2019打开脚本后一直Importing assets

    unity2018就不会有这个问题 而且我的External Script Editor 都设置的没有问题 新建一个项目中文名 在不用vs2019打开脚本之间都不会有这个进度条 一打开后就会有 高级编码设置的Unicode8 也不起作用了
  • 嘉立创PCB CAM软件

    概述 在PCB CAM软件中 Genesis2000 UCAM CAM350等国外软件占了大壁江山 其中的Genesis2000更是占了绝对份额 而中国却没有一款成熟可用的PCB CAM工业软件 根据公开资料显示 中国是PCB的制造大国 2
  • 快速学习Flutter

    文章目录 写在前面 Flutter官网 Flutter基本知识 Flutter 的特性 Flutter Windows环境搭建 查看文档时有几点注意 1 中国镜像地址 2 搭建 Android 开发环境 3 Flutter SDK Flut
  • MyCAT实现MySQL的读写分离

    在MySQL中间件出现之前 对于MySQL主从集群 如果要实现其读写分离 一般是在程序端实现 这样就带来一个问题 即数据库和程序的耦合度太高 如果我数据库的地址发生改变了 那么我程序端也要进行相应的修改 如果数据库不小心挂掉了 则同时也意味
  • 全排列、子集合subset、目标和combation、树的路径和问题

    主要的方法 深度优先搜索 回溯算法 宽度优先搜索 是否有相同元素需要考虑等问题 针对所给问题 确定问题的解空间 首先应明确定义问题的解空间 问题的解空间应至少包含问题的一个 最优 解 确定结点的扩展搜索范围 for等一系列循环等问题 以深度
  • matlab如何读取一个文件夹下所有文件,Matlab获取一个文件夹下所有文件名

    Matlab获取一个文件夹下所有文件名 fileFolder fullfile D MATLAB bin trc dirOutput dir fullfile fileFolder trc fileNames dirOutput name
  • 解决IDEA中ctrl+shift+f快捷键搜索没反应的问题

    文章目录 0写在前面 1 问题解决 1 1 直接切换英文输入法 1 2 win10 输入法 1 3 搜狗输入法 1 4 其他 2 写在末尾 0写在前面 今天想使用 在文件中查询 功能 使用ctrl shift f进行搜索的时候 疯狂的按组合
  • keil CMSIS_DAP.DLL missing

    由于keil版本支持问题 可以下载以下版本的CMSIS DAP DLL进行替换 CMSIS DAP DLL官方下载地址 百度云下载 提取码 g8ia keil安装目录如 D Keil v5 ARM BIN 先删除原来的CMSIS DAP D
  • MySQL存储过程遍历游标用loop嵌套循环的例子

    CREATE DEFINER root PROCEDURE procInitData IN sId1 INT IN sId2 INT IN sId3 INT IN sId4 INT IN sId5 INT IN sId6 INT IN sI
  • 函数调用约定cdecl、stdcall、fastcall

    我们在编写代码的时候都会调用函数 有点函数有多个参数 例如 int test int a char b char c 上面的函数调用方式是test 10 c tinus 那么这个函数编译器是怎么知道有多少个参数 参数类型是什么了 因为函数调
  • 基于FPGA的LCD1602驱动(含代码)

    目录 LCD1602显示原理 LCD1602接口 LCD1602操作时序 1 读操作时序 2 写操作时序 LCD1602初始化 LCD1602读写数据 LCD1602显示原理 将LCD显示屏与FPGA连接之后 需要做的第一件事就是进行LCD
  • Redis底层封装细节

    日常我们程序员在使用redis做缓存的时候 很少会直接使用到RedisTemplate直接操作k v键值对 而是通过对RedisTemplate原生代码的封装 来构建我们日常便于使用习惯的代码来操作数据 这里我分享一下日常基本的对Redis
  • 【华为OD机试】矩阵元素的边界值【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 给定一个N M矩阵 请先找出M个该矩阵中每列元素的最大值 然后输出这M个值中的最小值 输入描述 无 输出描述 无 备注 N和M的取值范围均为 0 100 用例1 输入
  • umi+dva+antd后台管理系统(3)---完整登录逻辑

    源码在这儿MyGithub 觉得不错留颗小星星哦 界面准备好啦 开始写登录 1 回顾一下redux是什么 redux 是一个应用数据流框架 主要解决了组件间状态共享的问题 原理是集中式管理 可以让数据更可控 react 中所有数据处理都在
  • JS加减乘除位移方法封装

    常用加减乘除等方法汇总 直接上代码 逻辑简单 代码如下 div 加减乘除位移方法汇总 div