如超过22位会自动变成科学计数还存在位数太多丢失精度问题,这里找到这里引入https://github.com/MikeMcl/bignumber.js ,的库,但老项目涉及地方太多,能从底层赋值的时候默认改成用new BigNumber吗?
底层?这个底层可能要突破cocos引擎进入v8引擎了
感觉不靠谱,啥项目需要这么多位,建议自己封装一下,慢慢改用到的地方,就是体力活
这个能重写number类吗 a+b自动改为用bignumber的计算
那么多位就自己写用string存起来
改number类不是一个好主意,number是js的基础数据类型。应该只在必须要高精度的数据上使用
底层无法进行这样的整体迁移,就算是其他编程语言应该也没有这个功能。大数处理最好还是自己在业务层进行。其实你遇到的问题我估计都用不着这种大规模的调整,可以说说你具体要解决什么问题。
怎么会想到改底层啊,你们有些人提的问题真是越看越气人。
别人给你推荐汽油车电动车,你非要给骡子屁股上装个发动机
真的,建议你们遇到问题多思考,别一上来就提需求
这个论坛里90%的技术问题都跟技术没一毛钱关系
就类似于捕鱼的游戏大厅,主要是money跟bet把,但已经做了200+台机器(排除活动)金币都是本地计算,如果要支持必须把钱改成bignumber,就要把200+机器同时改掉,否则之前的加号会变成字符串相加,因为无法重写+运算符,整体工作量比较大后期测试也很麻烦,可能稍微漏掉一个地方玩家的钱就会变得很大一旦出错游戏基本就玩完了。
我们老的项目用的spidermonkey,或者v8,都是js,规定这样, 是不是只能通过逐步修改业务去改了
还有有个自带的bigint的这个似乎可以直接 用+号运算很大的数,这个是哪个js版本可以吗
es11呀 我嚓
var a = BigInt(3443434343); console.log(a+1)
Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
也是不能混合使用,完蛋
官方瑟瑟发抖!!!准备删帖
只能改业务,改整个 js 虚拟机的话游戏可能会卡死(更何况没人知道怎么改)
好的~收到
遇到问题发到社区寻求解决方案或者看看大家是否有更好的想法不是很正常吗?
这种计算函数.不是应该抽出来建立公共方法么?
Number.prototype.toBig = function () {
var x = this;
if (Math.abs(x) < 1.0) {
var e = parseInt(x.toString().split(‘e-’)[1]);
if (e) {
x *= Math.pow(10, e - 1);
x = ‘0.’ + (new Array(e)).join(‘0’) + x.toString().substring(2);
}
} else {
var e = parseInt(x.toString().split(’+’)[1]);
if (e > 20) {
e -= 20;
x /= Math.pow(10, e);
x += (new Array(e + 1)).join(‘0’);
}
}
return x;
}
//将科学计数e转为不带e的方法扩展记录一下
你这不叫 toBig,而且转成非科学计数法对提升精度也没有帮助。因为返回的是一个字符串。既然都是字符串了,又无所谓是否是科学计数的?而且最终运算还不是得转成 Number 才能参与运算。