javaScript的数学计算

2023-11-06

js自带的数学计算的方法

默认加减乘除符号: +、-、*、/
NaN与任意操作数加减乘除,结果都是NaN

加法

数字与字符串相加会拼接成字符串

//特殊操作数的求和(n代表任意数字)
//NaN与任意操作数相加,结果都是NaN
console.log(NaN + n);
//Infinity.与任意操作数相加,结果都是Infinity
//无限。与任意操作数相加,结果都是无限
console.log(Infinity + n);  //(infinity+n);
//Infinity与Infinity相加,结果是Infinity
//无限与无限相加,结果是无限
console.log(Infinity + Infinity);
//正负Infnity相加,结果是NaN
//正负相加,结果是Nan
console.log((-Infinity) + Infinity);
console.log(1 + 1) //输出2  
console.log(1 + "1") //输出11  

减法

在减法运算中,如果操作数为字符串,先尝试把它转换为数值,再进行运算。如果有一个操作数不是数字,则返回NaN。

//特殊操作数的运算和加法规则-致
console.log(2 - "1"); //返回1
console.log(2 - "a"); //返回NaN

使用值减去0,可以快速把值转换为数字。例如HTTP 请求中查询字符串一般都是字符串型数字,可以先把 这些参数值减去0转换为数值。这与调用parseFloat()方法的结果相同,但减法更高效、快捷。减法运算符 的隐性转换如果失败,则返回NaN,这与使用 parseFloat()方法执行转换时的返回值是不同的。

乘法

//特殊操作数规则和加法一致
//特殊操作数规则和加法一致
//0除一个非无穷大的数字,结果是Infinity
//0除一个非无穷大的数字,结果是无限
//或-Infinity,符号由第二个操作数的符号决定
//或-无限,符号由第二个操作数的符号决定
console.log(n / 0);
//返回-Infinity,解释同上
//返回-Infinity,解释同上
console.log(n / -0); //(n/-0);
console.log(1 * 1) //输出1
console.log(1 * 1) //输出1

除法

//特殊操作数规则和加法一致
//特殊操作数规则和加法一致
console.log(1 / 1) //输出1  

求余运算

求余运算也称模运算

console.log(3 % 2); //返回余数1
//返回余数0.000000000000003
//返回余数0.000000000000003
console.log(3.1 % 2.3);

取反运算

前面加个负号(-)

//特殊操作数的取反运算
console.log(-5); //返回-5。正常数值取负数
//返回-5。先转换字符串数字为数值类型.
console.log(-"5");
//返回NaN。无法完全匹配运算,返回NaN
console.log("a");
console.log(-Infinity); //返回-Infinity
console.log(-Infinity); //返回Infinity
console.log(-NaN); //返回NaN

递增和递减

递增++和递减-- 运算就是通过不断的加1或减1,然后把结果赋值给左侧操作数,以实现改变自身结果的一种简洁方法。

  • 前置递增(++n) :先递增,再赋值。
  • 前置递减(–n) :先递减,再赋值。
  • 后置递增(n++) :先赋值,再递增。
  • 后置递减(n–) :先赋值,再递减。

Number

在js中,数字都属于Number对象,所以相应的有 Number 的一些方法

parseFloat()

将字符串转换成浮点数,和全局方法parseFloat()作用相同

parselnt()

将字符串转换成整型数字,和全局方法parselnt()作用相同

isInteger()

判断Number对象是否为整数

isNaN()

判断Number对象是否为NaN类型(NaN: 表示非数字)

leta1 = 400;
console.log('====' + isNaN(a1))//输出: ====false
toFixed()

把Number对象转换为字符串,结果的小数点后有指定位数的数字,不够以0补全,超出的话保留前两位小数

leta1 = 4;
console.log(a1.toFixed(2)) //输出4.00

toPrecision()

把Number对象格式化为指定的长度,长度不够的话 加小数点以0补全,长度超出的话一般不使用。

leta1 = 4;
console.log(a1.toPrecision(2)) //输出4.0
leta1 = 400;
//输出: ====4.0e+2
console.logl('===' + a1.toPrecision(2))

Math对象

Math是JavaScript中的一个内置对象,其中提供了一些数学中常用的常量值和函数,用来实现一些数学中 常见计算,例如计算平均数、求绝对值、四舍五入等。调用Math对象中的属性和方法无需预先使用
new运算符来创建它,直接将Math作为对象调用即可

abs(x)

返回x的绝对值

leta1 = -20.5697;
console.log('====' + Math.abs(a1))
ceil(x)

对x进行向上取整,即返回大于x的最小整数

leta1 = 20.5697;
console.log('====' + Math.ceil(a1)) //输出: 21

floor(x)

对x进行向下取整,即返回小于x的最大整数

leta1 = 20.5697;
console.log('====' + Math.foor(a1)) //输出: 20

max([x, [y, .])

返回多个参数的最大值

leta1 = 20.5697;
leta2 = 12;
console.log('====' + Math.max(a1, a2))//输出20.5697

min([x, [y, …1])

返回多个参数的最小值

leta1 = 20.5697;
leta2 = 12;
console.log('====' + Math.min(a1, a2))//输出12

pow(x,y)

返回x的y次幂

console.log('===' + Math.pow(2, 3))//2的3次方输出: 8

random()

返回一个0到1之间的随机数

//输出: 0.5560061 832715133
console.log('====' + Math.random)

round(x)

返回x四舍五入后的整数,注意是整数,没有小数

leta1 = 20.5697;
console.log('===' + Math.round(a1)) //輸出21
let a2 = 20.4697;
console.log('====' + Math.round(a2)) //输出20

sign(x)

返回x的符号,即一个数是正数、负数还是0
正数返回: 1
负数返回: -1
0返回: 0

leta1 = 20.5697;
console.log('===' + Math.sign(a1)) //输出1

trunc(x)

返回x的整数部分

leta1 = 20.5697;
console.log("===" + Math.trunc(a1)) //输出20

常见场景使用总结

求百分率的时候

例如:每天需要完成8个小时,480分钟的工作时间, 求每时每刻的工作完成率问题,百分比后面保留两位小数(四舍五入)。 思路:工作时间除以总时间,再乘以10000,执行四舍五入的方法,再除以100,就是得到完成率了。

let total = 480; //总工作时长
let finish = 100; //已经工作时长
let rate = Math.round(finish / total * 10000) / 100; //工作完成率S
console.log('rate', rate + "%"); //输出: 20.83%
得到10、100、 1000之间的随机数的时候

思路:先生成1-0之间随机数,再乘以10/100/1000, 再取整数部分。

const random = Math.random();
let random10 = Math.trunc(random * 10)
let random100 = Math.trunc(random * 100)
let random1000 = Math.trunc(random * 1000)
//输出: random10 4
console.log(' random10', random10)
//输出: random10 48
console.log('random100', random100)
//输出: random10 481
console.log('random1000', random1000)

可以使用插件,也就是第三方api .

-般的计算:例如加减乘除、四舍五入、三角函数的,可以使用js自带的Math类里面的方法。js本身计算精度的问题:
console.log(0.1+0.7)
输出: 0.79999999999999,在涉及到金额计算的时候,可能会有一分钱这样的误差,所以这是也可以使用第三方api来实现加减乘除等计算。

math.js .

中文官方文档: https://www.mathjs.cn/
英文文档: https://mathjs.org/
[中文文档有些地方无法显示,英文文档较为详细]
在math.js中有三种计算方法:

  • 执行常规的函数调用,例如math.add(math.sqrt(4), 2).
  • 计算像这样的表达式math. evaluate('sqrt(4) +2)
  • 链接操作,例如math.chain(4).sqrt).add(2).

Math.js包含许多配置选项。这些选项可以应用于创建 的mathjs实例,例如:可以配置number的具体类型
(BigNumber’,或’Fraction’)

链式操作

Math.js通过将值包装到中来支持链接操作Chain。可以使用函数math.chain(value) (以前称为 math.select(value))创建链。

math.chain(3) //开始链式操作
    .add(4) //加法
    .subtract(2) //减法
    .done() // 5 //计算完成结束
扩展

使用该函数可以轻松地使用函数和变量来扩展该库 import。该import函数在mathjs实例上可用,可以使 用该create函数创建该实例。 math.js可以扩展自定义的一些函数或变量到math实例 中供自己使用。

表达式的编写

可以编写-个表达式,给表达式中的变量赋值然后进 行计算。使用场景:需要进行灵活计算的时候(例如 电站项目的开发场景)
一个简单的例子:编写-一个简单的函数表达式,然后. 调用这个表达式得到值。

const parser = math.parser() //创建解析器
parser.evaluate("f(x) = x- 5") //编写计算表达式
let a1 = parser.evaluate('f(2)') //计算表达式// -3
let a2 = parser.evaluate("f(6)") // 1
console.log('a1', a1)
console.log('a2', a2)

具体表达式的语法、使用见文档。
https://www.mathjs.cn/docs/expressions/syntax.html

数据类型

布尔型、数字、大数字(Bignumber) 、复数(Complex)、分数(Fraction) 、数组(Array) 、矩阵(Matrix)、Unit(单位)、 String

math中的常量

NaN:没有数字。NaN
pi, PI: pi是一个数学常数,它是圆的周长与其直径之 比。3.141592653589793
version:返回math.js的版本号。

//输出: version 7.0.1
console.log("version", math.version)
常用api

api函数文档: https://mathjs.org/docs/reference/functions.html

常见算术计算

加法: math.add (x, y)
减法: math.subtract (x,y)
乘法: math.multiply (x,y)
除法: math.divide (x, y)
取绝对值: math.abs (x)
计算x到y,的幂: math.pow (x, y)
四舍五入: math.round (x[, n]) 可以保留n位小数
还有其他的复杂函数的计算:例如:代数函数、按位 函数、集合函数、 概率函数、关系函数、设置函数、 统计函数。

decimal.js

js有精度问题,对于-些金额的计算就总是与偶莫名其 妙的问题,decimal.js是使用的二 进制来计算的,所以能解决js的精度问题。
中文文档: https://gitee.com/lixingwu/decimal.js_cn/blob/master/cn/index.html #复制对应 的html代码打开
官方文档: http://mikemcl.github.io/decimal.js/

使用方式

安装:下载对应js文件引入使用,或者使用npm安装 下载地址: https://github.com/MikeMc/decimal.js/
简单使用:

//加法
vara = 0.1;
varb = 0.2;
console.log('Decimal.js加法运算a+b=', new Decimal(a).add(new Decimal(b)).toNumber());

//减法
vara = 1.0;
varb = 0.7
console.log("Decimal.js减法运算a-b=", new Decimal(a).sub(new Decimal(b)).toNumber());

//乘法
vara = 1.01;
var b = 1.003;
console.log("Decimal.js乘法运算a*b=", new Decimal(a).mul(new Decimal(b)).toNumber());
//除法
vara = 0.029;
varb = 10;
console.log("Decimal.js除法运算a/b=", new Decimal(a).div(new Decimal(b)).toNumber());

相应的也有四舍五入、绝对值这些函数,详细见官方 文档。 简单demo:


<script src="https://cdn.bootcss.com/decimal.js/10.1.1/decimal.js"></script>
<script>
    //没有使用decimaljs
    //110.0000000000001
    console.log(1.1 * 100)
    // 0:30000000000000004
    console.log(0.1 + 0.2)
    console.log(2.05 * 1.89 * 1.74 * 10000)
    //使用使用decimal.js
    console.log(new Decimal(1.1)
            .mul(new Decimal(100))
            .toNumber() //110
    console.log(new Decimal(0.1)
            .plus(new Decimal(0.2))
            .toNumber() //0.3 ;
    console.log(new Decimal(2.05)
            .mul(new Decimal(1.89))
            .mul(new Decimal(1.74))
            .mul(new Decimal(10000))
            .toNumber()//67416.3
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javaScript的数学计算 的相关文章

  • 我如何能够以两行显示标题,并且每行的字体大小不同?

    我正在使用 Google Chart API 创建时间线图 并希望将图的标题修改为两行 问题 我如何能够显示具有不同字体大小的两线图表标题 电流输出 理想输出 相关研究 我唯一能找到的是有人试图用饼图来做到这一点 但我尝试了但无法使其发挥作
  • 由于 apollo-client 未定义,无法解构 GraphQL 查询?

    我正在寻找调试与错误消息相关的问题 未捕获的类型错误 无法解构 0 apollo client WEBPACK IMPORTED MODULE 4 useQuery 因为它未定义 Context 我正在为我的 React js 项目设置后端
  • 如何使用 JavaScript 创建链接?

    我有一个标题字符串和一个链接字符串 我不知道如何将两者放在一起以使用 JavaScript 在页面上创建链接 任何帮助表示赞赏 我试图解决这个问题的原因是因为我有一个 RSS 源并且有一个标题和 URL 列表 我想将标题链接到 URL 以使
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • 为什么 iife 在一个简单的例子中不起作用?

    我不明白为什么函数表达式调用不起作用并抛出错误 你能给我解释一下吗 var a function x alert x function a 1 谢谢大家 任务比我想象的要容易得多 这是因为 JS 将 IIFE 解析为函数的参数调用 这样做时
  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • 可以在初始 DOM 解析期间/之前修改 DOM 吗?

    是否可以在初始 DOM 解析期间或之前修改 DOM 或者我是否必须等到 DOM 被解析和构建之后才能与其交互 更具体地说 是否有可能阻止 DOM 中的脚本元素使用用户脚本 内容脚本或 Chrome 或 Firefox 中的类似脚本运行 在解
  • Snap.svg - 停止在可悬停元素的子元素上重新触发悬停事件

    对于一个项目 我使用的 SVG 形状由背景多边形和背景多边形上方的一些文本 我已将其转换为路径 组成 我正在使用 Snap svg 为我的形状设置动画 当我将鼠标悬停在多边形上时 形状应该缩放到特定尺寸 包括其中的所有内容 鼠标移开时 形状
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 尝试将数据存储在点击器网站中

    我正在尝试存储一个名为的变量score无论何时刷新 您都会一次又一次地使用它 我不明白的是它的代码是什么 我尝试了一些方法 但似乎都不起作用 这是我的答题器网站 但是当我尝试使用 JavaScript 来存储它时 它不起作用window o
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • Javascript 假值(null、未定义、false、空字符串:“”或 '' 和 0)和比较(==)运算符 [重复]

    这个问题在这里已经有答案了 当我使用任何一个值时 null undefined false 0 in a if陈述 它总是被评估为谬误 false 另外 这些值的否定 null undefined false 0 in a if语句总是被评
  • Firebase 函数 onWrite 未被调用

    我正在尝试使用 Firebase 函数实现一个触发器 该触发器会复制数据库中的一些数据 我想观看所有添加的内容votes user vote 结构为 我尝试的代码是 const functions require firebase func
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的

随机推荐

  • 【应急响应】后门攻击检测指南&Rookit&内存马&权限维持&WIN&Linux

    文章目录 Windows实验 常规后门 网络对外连接查看 自启动测试 隐藏账户 映像劫持 屏保 登录 Linux实验 常规后门 Rootkit后门 GScan rkhunter 权限维持后门 GScan rkhunter Web层面 通用系
  • 秋叶大神的Stable Diffusion整合包

    前段时间在研究Stable Diffusion本地化部署 但是对于新手小白来说算是比较难得 不过没关系 我在B站发现了秋叶大神的Stable Diffusion整合包 我在用很方便 必须分享出来 Stable Diffusion整合包下载地
  • 基于vue的页面加载动画

    基本原理是 在window加载之前 渲染出加载动画 页面渲染完成后 移除加载动画即可 在vue项目中一般只需二步 第一步 写css和dom 在vue项目的index html中引入css 第二步 在app vue created中移除加载动
  • pytorch_lighting

    1 pytorch lighting 简介 1 1 pytorch lighting 是什么 1 1 1 pytorch lightning 是什么 PyTorch Lightning 是一个开源的 PyTorch 加速框架 它旨在帮助研究
  • vue+Element-ui实现树形组件、表格树

    需求 要做出如下图所示的 树形表格 也就是数据之间有父子类关系的这种 可以点击展开 收缩 像上图这样的表格树 实现 1 使用树形组件 在学习树形表格之前 肯定得先搞懂普通的树形组件是怎么搞的 然后将其套到表格中就好了 请参考ElementU
  • linux real时间,【整理】RT-linux 实时Linux RealTime Linux

    折腾 整理 数控系统 操作系统 期间 看提到了RT linux 去研究看看 RT linux Vanilla kernel的问题 Linux kernel在spinlock irq上下文方面无法抢占 因此高优先级任务被唤醒到得以执行的时间并
  • 力扣刷题:两数相加

    给你两个 非空 的链表 表示两个非负的整数 它们每位数字都是按照 逆序 的方式存储的 并且每个节点只能存储 一位 数字 请你将两个数相加 并以相同形式返回一个表示和的链表 你可以假设除了数字 0 之外 这两个数都不会以 0 开头 输入 l1
  • Android Studio Proxy Setting 设置(详细图文说明)

    Android Studio代理设置 Android Studio Proxy Setting 设置 在很多时候编译依赖的相关库文件都是需要墙出去的 所以我们得学会怎么翻 具体可以查查网上很多详细的攻略 这里只介绍墙完后Android St
  • 【深入理解C++】空类对象所占用的空间大小

    文章目录 1 须知 2 空类对象所占用的空间大小 3 一个类继承空类 4 空类作为另一个类的成员 1 须知 类本身是没有大小的 类的大小指的是类的对象所占的大小 如果用 sizeof 运算符对一个类型名操作 得到的是具有该类型实体的大小 2
  • 移植4- uboot之网卡驱动移植

    linux 中 网络分为许多层 网卡处理物理与DATA LINK层 linux驱动就是将DATALINK层的数据包送到TCP IP层进行处理 主要是通过struct net device这个结构 struct net device实现了支持
  • 字符串转化使用String.valueOf(value) 代替 “ “ + value

    文章目录 把其它对象或类型转化为字符串时 使用String valueOf value 比 value 的效率更高 把其它对象或类型转化为字符串反例 int num 520 value String strLove num 把其它对象或类型
  • 2023年超全前端面试题-背完稳稳拿offer(欢迎补充)

    HTML CSS相关 HTML5 HTML5新特性 增强了表单 input新增了一些type color 定义调色板 tel 定义包含电话号码的输入域 email 定义包含email地址的输入域 search 定义搜索域 number 定义
  • innodb索引概念

    author skate time 2013 04 09 总结记录下innodb的索引概念 以备查看 innodb索引分类 聚簇索引 clustered index 1 有主键时 根据主键创建聚簇索引 2 没有主键时 会用一个唯一且不为空的
  • Qt+Pyhton实现麒麟V10系统下word文档读写功能

    目录 前言 1 C 调用python 1 1 安装Python开发环境 1 2 修改Qt工程配置 1 3 初始化Python环境 1 4 C 调用Python 函数 1 5 常用的Python接口 2 python虚拟环境 2 1Pytho
  • python 编码规范-代码的整体布局

    代码的整体布局主要囊括了代码在整体结构上应该注意的事项 缩进 空格 制表符 Python 在语法上使用缩进来确定代码块的开始和结束 对于每一级缩进 应为 4 个空格 并且不要混用空格与制表符 缩进本身是一种语法上的限制 是强制性的 有的ID
  • 【计算机网络系列】网络层④:详解IP数据包的格式

    IP数据报的格式 IP数据报的格式说明协议IP都具有什么功能 在协议IP的标准中 描述首部格式的宽度是32位 即4字节 下图是IP数据报的完整格式 从上图可看出 一个IP数据报由首部和数据两部分组成 首部的前一部分长度是固定的 共20字节
  • 炉石传说一直显示重新连接服务器,炉石传说一直显示战网开启中 炉石传说卡在启动战网解决办法...

    很多炉石玩家在登录战网客户端出现炉石传说正在启动战网不动的问题 下面小编为大家带来炉石传说卡在启动战网解决办法 一起来看下吧 很多炉石玩家在登录战网客户端出现炉石传说正在启动战网不动的问题 下面小编为大家带来炉石传说卡在启动战网解决办法 一
  • 基于AntDesign Vue的响应式登录页面

    为了做一个自己的前后端分离的后台管理系统 特地做了一下登录页面 大概的架子如下 后面需要替换一下顶部导航的信息 先大概贴一下代码 以后直接复制使用 整体的布局是自己写的样式 如果后面要替换为其他的UI框架 比如element ui ivie
  • selenium打开edge浏览器闪退问题

    selenium打开浏览器闪退问题 本文记录selenium在打开浏览器后会自动闪退问题 版本如下 需保证浏览器驱动为对应版本 官方给的下载驱动的地址为 https developer microsoft com zh cn microso
  • javaScript的数学计算

    js自带的数学计算的方法 默认加减乘除符号 NaN与任意操作数加减乘除 结果都是NaN 加法 数字与字符串相加会拼接成字符串 特殊操作数的求和 n代表任意数字 NaN与任意操作数相加 结果都是NaN console log NaN n In