大数字的单位转换方法

  • 数据准备
  • 大数字转字符串
  • 字符串转大数字
  • 说明

近期做了个游戏,用到了大数字的单位计算和转换,这里作为参考纪录一下。js写的,其他的语言应该也差不了太多。

数据准备

显示的通用格式为: 999.999aa,小于7位数则显示:999,999,小于4位数则显示: 999.999
用于计算的大数字类使用得是:https://github.com/MikeMcl/decimal.js

UNIT_BASE: ["", "", "M", "B", "T"],
UNIT_CHAT: ["a", "b", "c", "d", "e", "f", "g","h", "i", "j", "k", "l", "m", "n","o", "p", "q", "r", "s", "t","u", "v", "w", "x", "y", "z"],

大数字转字符串

    /*** 将大数字转换为带单位的6位长度数字* @public* @see https://github.com/MikeMcl/decimal.js/* @param {Decimal} _val * @returns {String}*/decimal2string(_val) {if (!(_val instanceof Decimal)) {_val = new Decimal(_val);}let neg = _val.isNeg();if (neg) _val = _val.abs();let n = _val;let e = n.e;let m = e / 3;if (e % 3 != 0) {m = Math.floor((e - 1) / 3);e = m * 3;if (e < 0) e = 0;}if (m < 0) m = 0;let str = "";let unit = "";if (e < 15) {unit = this.UNIT_BASE[m];} else {let n = Math.floor((e - 15) / 3);unit = "";if (n < 26) {unit = this.UNIT_CHAT[0] + this.UNIT_CHAT[n];} else {while (n > 0) {let r = n % 26;n = Math.floor(n / 26);unit = this.UNIT_CHAT[r] + unit;}}}if (n.lt(1000)) {str = n.toFixed(3).toString();if (str.indexOf(".") != -1) {while (str.charAt(str.length - 1) == "0") {str = str.slice(0, str.length - 1);}}if (str.charAt(str.length - 1) == ".") {str = str.slice(0, str.length - 1);}} else if (n.lt(1000000)) {str = n.toDP(0).toString();let ins = str.length - 3;str = str.slice(0, ins) + "," + str.slice(ins);} else {let n0 = n.div(Decimal.pow(1000, m)).toFixed(3);str = n0.toString();if (str.indexOf(".") != -1) {while (str.charAt(str.length - 1) == "0") {str = str.slice(0, str.length - 1);}}if (str.charAt(str.length - 1) == ".") {str = str.slice(0, str.length - 1);}}return (neg ? "-" : "") + str + unit;},

字符串转大数字

    /*** 将字符串转为大数字, 格式为 10, "10", "10|T"* @public* @see https://github.com/MikeMcl/decimal.js/* @param {Number||String} _val * @returns {Decimal}*/string2decimal(_str) {let num;if (_str instanceof Decimal) {return _str;}_str = "" + _str;if (typeof _str == 'number') {num = new Decimal(_str);// debug( "NumberUtils.string2decimal: number->" + num.toString() );return num;}if (_str.indexOf("|") == -1) {num = new Decimal(_str);// debug( "NumberUtils.string2decimal: string->" + num.toString() );return num;}let str = _str.split("|");let m = 0;let x = parseFloat(str[0]);if (this._units == null) {this._units = new Map();let cfgs = C.all("GameUnit");for (let cfg of cfgs) {this._units.set(cfg[1].unit, cfg[0]);}}if (this._units.has(str[1])) {m = this._units.get(str[1]);}num = Decimal.pow(10, m).times(x);// debug( "NumberUtils.string2decimal: -->" + num.toString() );return num;},

说明

以上内容没有经验严格测试,属于能用的阶段吧。至少目前为止没有出现问题。
最后附上源代码地址:https://github.com/aiyoyoyo/CocosCreator-Jees/blob/master/src/jees-util.js

大数字的单位转换方法相关推荐

  1. js和 ts 将大数字金额转换成带单位的数字金额,万,千万,亿,格式化金额数字,格式化成带单位的金额,附ts版代码

    js将大数字金额转换成带单位的数字金额,万,千万,亿, 第一个参数是在转换的数字, 第二个参数是返回的格式 不传第二个参数,返回数字和单位分开的,数组格式,传第二个参数后,返回数组和单位的字符串,这样 ...

  2. HTML数字项目标签千位分隔符,请使用千位分隔符(逗号)表示web网页中的大数字

    一.移动端大数值会默认当作电话号码 在手机等移动设备上,对于超过一定个数的数值,系统默认会当做电话号码处理,而不是一个数字 按照中文用户的使用习惯,有时候个数很多的连续数字其实真的就是一个数字,自动变 ...

  3. excel两个字符串相减_Excel减法函数用法的7个实例,含带条件、数字带单位、有标识才相减和用表格所有数减一个数...

    在 Excel 中,计算减法有两种方法,一种是用加法函数(即求和函数)Sum 计算,另一种是用减号计算.用Sum函数计算减法时,只需在减数前加减号:用减号计算直接用一个数减另一个数即可. 在计算减法过 ...

  4. 4、大数字运算(BigInteger类和BigDecimal类)

    在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中 BigInteger 类是针对 ...

  5. Flutter Dart:用数字分组显示大数字

    Flutter & Dart:用数字分组显示大数字 大家好,我是坚果,我的公众号"坚果前端", 用逗号显示大数字作为千位分隔符将增加可读性.这篇简短的文章将向您展示如何借助 ...

  6. VC中数字与字符串转换方法

    VC中数字与字符串转换方法 u     字符串转数字   l         1.CRT函数     ASCII UNICODE TCHAR VS2005 int atoi _wtoi _tstoi, ...

  7. python大数_python处理大数字的方法

    本文实例讲述了python处理大数字的方法.分享给大家供大家参考.具体实现方法如下: def getFactorial(n): """returns the factor ...

  8. 西工大java实验报告给,西工大数字集成电路实验 实验课6 加法器的设计

    西工大数字集成电路实验 练习六 加法器的设计 一.使用与非门(NAND).或非门(NOR).非门(INV)等布尔逻辑器件实现下面的设计. 1.仿照下图的全加器,实现一个N位的减法器.要求仿照图1画出N ...

  9. java biginteger 运算_Java大数字运算之BigInteger 原创

    在 Java中,有许多数字处理的类,比如Integer 类.但是Integer 类有一定的局限性,下面我们就来看看比 Integer 类更厉害的一个,BigInteger类. BigInteger类型 ...

最新文章

  1. consolez设置
  2. python orm benchmark_python 编写ORM
  3. HTML5----简易贪吃蛇小游戏
  4. SharePoint 2007 URL地址快速一览表
  5. 50种奇妙装置玩法,将STEM教育一网打尽
  6. android系统提供了url通信,Android两种HTTP通信,HttpURLConnection和HttpClient
  7. c语言循环数组赋值,for循环里边给数组赋值的难题
  8. macbook装双系统多分区其实很简单,你只要把macbook当作一台普通pc就可以了!
  9. 阿里大文娱:不存在“优酷自制团队转入阿里影业”一说
  10. TCP/IP之路由算法
  11. 使用matplotlib动态打印图片(RGB图片)
  12. 博科Brocade 6505光纤交换机
  13. 【一江水 一家人】 盘龙区打造铸牢中华民族共同体意识盘龙江示范带
  14. aliyun资源编排 介绍和实例
  15. BurpSuite抓包出现建立安全连接失败(Software is Preventing Firefox From Safely Connecting to This Si)
  16. 开发一款游戏需要服务器系统,搭建一个游戏服务器需要什么
  17. 为什么肯德基和麦当劳总是开在一起?
  18. python笔记-05(条件、循环及其他语句)
  19. 主板诊断卡怎么用?主板诊断卡代码含义大全与故障解决办法
  20. FlipView 索引为0 WP8.1

热门文章

  1. 记我的第一个springboot项目,Roomstore寝室小卖部系统
  2. google地图聚合markerclusterer.js修改聚合点显示内容
  3. 引入阿里图标库(iconfont)后图标黑白问题
  4. python协程详解_python协程详解
  5. MIT发布全球十大突破性技术,百度二度入选包揽国内全部AI奖项
  6. Mac下关于pip和pip3的正确解锁方式
  7. 用MobileVLCKit播放rmvb视频
  8. mysql select table_MySQL中的CREATE TABLE……SELECT语句
  9. 如何让普通电脑变服务器 让外网访问内网的tomcat
  10. 域控制器需要安装文件服务器,域控服务器需要配置dns吗