js 大数计算

原理

JavaScript 安全整数 是 -253-1 ~ 253-1 ,即: -9007199254740991 ~ 9007199254740991; 换句话说,整数超过这个范围就会丢失精度,那超过这个范围的基本运算也别指望有多精确了;

换一种思路,用字符串表示数字,比如 "9007199254740999",不存在四舍五入精度丢失的问题,这样不管数值多大都没影响;

用数字表示字符串之后,那么数字的运算就转换成字符串的运算;

big number add

从最后一个数字开始向前依次相加,逢10进1,下一位数字相加的时候加上次计算的进位;


const add = (num1, num2) => {
// 获取最大长度
const len = Math.max(num1.length, num2.length);
// 对齐
num1 = num1.padStart(len, 0);
num2 = num2.padStart(len, 0); let flag = 0;
let result = ``;
let temp = 0;
for(let i=len-1; i>=0; i--){
temp = flag + parseInt(num1[i]) + parseInt(num2[i])
result = (temp%10) + result
flag = parseInt(temp/10)
}
// 判断是否进位
return result = (flag === 1 ? '1' : '') + result;
}
const n1 = "9007199254740990"
const n2 = "1229007199254740993443" add(n1, n2);
// "1229016206453995734433"

MathML

Mathematical Markup Language (MathML) Version 3.0 2nd Edition

W3C Recommendation 10 April 2014

https://www.w3.org/TR/MathML/

HTML var tag

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/var

<table width="100%">
<tbody>
<tr>
<td id="eqnoc2"><var>E</var> = <var>m</var><var>c</var><sup>2</sup></td>
</tr>
</tbody>
</table>
E = mc2

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/samp

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup

<p><var>a<sup>2</sup></var> + <var>b<sup>2</sup></var> = <var>c<sup>2</sup></var></p>

a2 + b2 = c2

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub

H<sub>2</sub>O

H2O

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr

MathJax

xml for math

https://mathjax.github.io/MathJax-demos-web/tex-chtml.html


xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


js 大数计算的更多相关文章

  1. js大数计算之展示

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. js大数计算之计算

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. js浮点数计算问题 + 金额大写转换

    一 js浮点数计算问题解决方案: 1.使用 NumberObject.toFixed(num) 方法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 2.较精度计算浮点数 ...

  4. js小数计算小数点后显示多位小数(转)

    首先写一个demo 重现问题,我使用的是一个js在线测试环境[打开] 改写displaynum()函数 function displaynum(){var num = 22.77;alert(num ...

  5. 关于js中select的简单操作,以及js前台计算,span简单操作

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. js中计算两个日期之差

    js中计算两个日期之差            var aBgnDate, aEndDate;            var oBgnDate, oEndDate;            var nYl ...

  7. 关于js浮点数计算精度不准确问题的解决办法

    今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一直碰到这个问题,都是简单的使用tofixed方法进行处理一下,这对于一个程序员来说是及其不严谨的.因此在网上收集了一些处理浮点数精 ...

  8. js前台计算两个日期的间隔时间

    js前台计算两个日期的间隔时间(时间差)原创 2017年08月28日 16:09:43 标签:javascript 1144在后台传来两个时间字段,从中解析出两个字符串类型的日期格式 需要在前台解析出 ...

  9. Vue.js:计算属性

    ylbtech-Vue.js:计算属性 1.返回顶部 1. Vue.js 计算属性 计算属性关键词: computed. 计算属性在处理一些复杂逻辑时是很有用的. 可以看下以下反转字符串的例子: 实例 ...

随机推荐

  1. all header field names in both HTTP requests and HTTP responses are case-insensitive.

    https://tools.ietf.org/html/rfc6455#section-4.2.1 Please note that according to [RFC2616], all heade ...

  2. 你可能会问,为什么不直接进入 CLOSED 状态,而要停留在 TIME_WAIT 这个状态?

    你可能会问,为什么不直接进入 CLOSED 状态,而要停留在 TIME_WAIT 这个状态? 划重点,2MSL 的时间是从主机 1 接收到 FIN 后发送 ACK 开始计时的:如果在 TIME_WAI ...

  3. gitignore 不起作用的解决办法 不再跟踪 让.gitignore生效,跟踪希望被跟踪的文件

    实践 # https://git-scm.com/docs/gitignore https://git-scm.com/docs/gitignore 不跟踪log目录下的所有文件,但需要保留这个文件夹 ...

  4. 单点登录(SSO)的设计与实现

    一.前言 1.SSO说明 SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.https://baike.baidu.c ...

  5. Excel通配符

    数据科学交流群,群号:189158789 ,欢迎各位对数据科学感兴趣的小伙伴的加入!

  6. kafka auto.offset.reset参数解析

    kafka auto.offset.reset参数解析 1.latest和earliest区别 2.创建topic 3.生产数据和接收生产数据 4.测试代码 auto.offset.reset关乎ka ...

  7. mysql 用户 登陆 权限相关

    1. CREATE USER 'dog2'@'localhost' IDENTIFIED BY ''; 将"localhost"改为"%",表示在任何一台电脑上 ...

  8. scala的隐式转换学习总结(详细)

    一,隐式转换函数 1, 格式, implicit def 函数名(参数):返回值类型={ //函数体 //返回值 } 2,例子: //导入对应的规则类,以免出现警告 scala> import ...

  9. KVM虚拟化(KVM简介和KVM安装)

    KVM 虚拟化架构分类 寄居虚拟化架构:指在宿主操作系统之上安装和运行虚拟化程序,依赖于宿主操作系统对设备的支持和物理资源的管理. 裸金属虚拟化架构:指直接在硬件上面安装虚拟化软件,再在其上安装操作系 ...

  10. promise封装微信小程序的request

    1.在utils下创建一个 request.js文件,然后将方法导出 const app = getApp(); //使用promise封装request请求 const POST = (url, p ...