直接上工具类Kotlin版本

package com.noboauto.module_base.utilimport java.math.BigDecimal/*** @author xiayiye5* @date 2021/10/29 9:01* 数字格式化显示* 小于万默认显示 大于万以1.7万方式显示最大是9999.9万* 大于亿以1.1亿方式显示最大没有限制都是亿单位* 示例如下:*      println("打印格式化:" + NumberUtils.formatNum(1522255226565))*      println("打印格式化:" + NumberUtils.formatNum(15500))*      println("打印格式化:" + NumberUtils.formatNum(19500))*      println("打印格式化:" + NumberUtils.formatNum(1522259000000))*      println("打印格式化:" + NumberUtils.formatNum(1522295000000))*      println("打印格式化:" + NumberUtils.formatNum(16400))*      println("打印格式化:" + NumberUtils.formatNum(16700))*      println("打印格式化:" + NumberUtils.formatNum(19500))* *      格式化结果如下:*      打印格式化:15222.6亿*      打印格式化:1.6万*      打印格式化:2万*      打印格式化:15222.6亿*      打印格式化:15223亿*      打印格式化:1.6万*      打印格式化:1.7万*      打印格式化:2万*******/
object NumberUtils {/*** 默认不格式化单位 "千"*/fun formatNum(num: Long): String {return formatNum(num, false)}/*** @param num   格式化的数字* @param isBool 是否格式化千,为true,并且num大于999就显示999+,小于等于999就正常显示* @return 返回结果*/fun formatNum(num: Long, isBool: Boolean?): String {var kBool = isBoolval sb = StringBuffer()if (kBool == null) {kBool = false}val b0 = BigDecimal("1000")val b1 = BigDecimal("10000")val b2 = BigDecimal("100000000")val b3 = BigDecimal(num)var formatNumStr = ""var quantity = ""// 以千为单位处理  if (kBool) {return if (b3.compareTo(b0) == 0 || b3.compareTo(b0) == 1) {"999+"} else num.toString()}// 以万为单位处理  if (b3.compareTo(b1) == -1) {sb.append(b3.toString())} else if (b3.compareTo(b1) == 0 && b3.compareTo(b1) == 1|| b3.compareTo(b2) == -1) {formatNumStr = b3.divide(b1).setScale(1, BigDecimal.ROUND_HALF_UP).toString()quantity = "万"} else if (b3.compareTo(b2) == 0 || b3.compareTo(b2) == 1) {formatNumStr = b3.divide(b2).setScale(1, BigDecimal.ROUND_HALF_UP).toString()quantity = "亿"}if ("" != formatNumStr) {var i = formatNumStr.indexOf(".")if (i == -1) {sb.append(formatNumStr).append(quantity)} else {i += 1val v = formatNumStr.substring(i, i + 1)if (v != "0") {sb.append(formatNumStr.substring(0, i + 1)).append(quantity)} else {sb.append(formatNumStr.substring(0, i - 1)).append(quantity)}}}return if (sb.isEmpty()) {"0"} else sb.toString()}
}

我们再看下Java版本:Java版本未测试,请自行测试

package com.demo;import java.math.BigDecimal;public class NumberJavaUtils {/*** 默认不格式化单位 "千"*/public String formatNum(Long num) {return formatNum(num, false);}/*** @param num    格式化的数字* @param isBool 是否格式化千,为true,并且num大于999就显示999+,小于等于999就正常显示* @return 返回结果*/public String formatNum(Long num, Boolean isBool) {boolean kBool = isBool;StringBuffer sb = new StringBuffer();BigDecimal b0 = new BigDecimal("1000");BigDecimal b1 = new BigDecimal("10000");BigDecimal b2 = new BigDecimal("100000000");BigDecimal b3 = new BigDecimal(num);String formatNumStr = "";String quantity = "";// 以千为单位处理  if (kBool) {if (b3.compareTo(b0) == 0 || b3.compareTo(b0) == 1) {return "999+";} else {return num.toString();}}// 以万为单位处理  if (b3.compareTo(b1) < 0) {sb.append(b3.toString());} else if (b3.compareTo(b1) == 0 && b3.compareTo(b1) > 0|| b3.compareTo(b2) < 0) {formatNumStr = b3.divide(b1).setScale(1, BigDecimal.ROUND_HALF_UP).toString();quantity = "万";} else if (b3.compareTo(b2) == 0 || b3.compareTo(b2) == 1) {formatNumStr = b3.divide(b2).setScale(1, BigDecimal.ROUND_HALF_UP).toString();quantity = "亿";}if (!"".equals(formatNumStr)) {int i = formatNumStr.indexOf(".");if (i == -1) {sb.append(formatNumStr).append(quantity);} else {i += 1;String v = formatNumStr.substring(i, i + 1);if (!v.equals("0")) {sb.append(formatNumStr.substring(0, i + 1)).append(quantity);} else {sb.append(formatNumStr.substring(0, i - 1)).append(quantity);}}}if (sb.length() == 0) {return "0";} else {return sb.toString();}}
}

kotlin版本2

package com.noboauto.module_base.utilimport java.math.BigDecimal/*** @author xiayiye5* @date 2021/10/29 9:01* 数字格式化显示* 小于万默认显示 大于万以1.7万方式显示最大是9999.9万* 大于亿以1.1亿方式显示最大没有限制都是亿单位*/
object NumberUtils {/*** 默认不格式化单位 "千"*/fun formatNum(num: Long): String {return formatNum(num, false)}/*** @param num   格式化的数字* @param isFormatThousand 是否格式化千,为true,并且num大于999就显示999+,小于等于999就正常显示* @return 返回结果*/fun formatNum(num: Long, isFormatThousand: Boolean?): String {var isOutweighThousand = isFormatThousandval sb = StringBuffer()if (isOutweighThousand == null) {isOutweighThousand = false}val thousand = BigDecimal("1000")val tenThousand = BigDecimal("10000")val unit = BigDecimal(num)var formatNumStr = ""var quantity = ""// 以千为单位处理  if (isOutweighThousand) {return if (unit.compareTo(thousand) == 0 || unit.compareTo(thousand) == 1) {"999+"} else num.toString()}// 以万为单位处理  if (unit.compareTo(tenThousand) == -1) {sb.append(unit.toString())} else {var scale = unit.divide(tenThousand).setScale(1, BigDecimal.ROUND_HALF_UP)if (scale.compareTo(tenThousand) == 0 || scale.compareTo(tenThousand) == 1) {scale = scale.divide(tenThousand).setScale(1, BigDecimal.ROUND_HALF_UP)quantity = "亿"} else {quantity = "万"}formatNumStr = scale.toString()}if ("" != formatNumStr) {var i = formatNumStr.indexOf(".")if (i == -1) {sb.append(formatNumStr).append(quantity)} else {i += 1val v = formatNumStr.substring(i, i + 1)if (v != "0") {sb.append(formatNumStr.substring(0, i + 1)).append(quantity)} else {sb.append(formatNumStr.substring(0, i - 1)).append(quantity)}}}return if (sb.isEmpty()) {"0"} else sb.toString()}
}

Android开发之播放量点赞量打赏量收藏量单位格式化工具类相关推荐

  1. Android开发笔记(八十六)几个特殊的类

    接口interface interface是一些功能的集合,但它只定义了对象必须实现的成员,而不包含成员的实现代码,成员的具体代码由实现接口的类提供.Android对接口的使用场景主要有三类:事件监听 ...

  2. Android开发规范:APP版本发布(全量发布、灰度发布)

    我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 全量发布 灰度发布 欢迎加入Android开发交流QQ群: app ...

  3. Android移动开发-Android开发日历时常用的农历和公历换算代码工具类

    下面是与Android开发日历时常用的有关农历计算.公历计算.二十四气节相关的代码工具类的代码. Constant.java逻辑代码如下: package com.fukaimei.calendar. ...

  4. 3年Android开发工程师面试经验分享,先收藏了

    前言 程序员这个行业,日新月异,技术体系更新速度快,新技术新框架层出不穷,所有的技术都像是一个无底洞,当你学得越多就会发现不懂的越多,不懂的越多,需要学习的就更多. 因此,一旦选择了这个行业,就意味着 ...

  5. android开发常用app有哪些,【推荐收藏】安卓开发中必备的那些神器APP

    (2)当前Activity 该款软件可显示最前台页面所在应用的包名及Activity https://github.com/109021017/android-TopActivity http://p ...

  6. Android开发--图形图像与动画(一)--Paint和Canvas类

    * Paint类  * Paint类代表画笔,用来描述图形的颜色和风格,如线宽,颜色,透明度和填充效果等信息.  * 使用Paint类时,需要先创建该类的对象,可以通过该类的构造函数实现.通常情况的实 ...

  7. Android开发——图形编程(一)简单介绍与使用绘图类Paint、Canvas

    Android图形编程基础 文章目录 Android图形编程基础 画笔Paint的 画布Canvas 自定义View的基本实现方法 实例代码 绘图绘图,首先要有的就是颜色Color Android系统 ...

  8. 做了一个系列的Android开发教程列表

    做了一个系列的Android开发教程列表.花了半天多的专题 里面包含了 4个系列的教程. 也包含了很多Android开发资料. 喜欢的人可以收藏哦:http://dev.apkbus.com/

  9. Android开发笔记(序)写在前面的目录

    知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入 ...

最新文章

  1. Nginx源码分析链接
  2. C++基础:C++类成员属性的一种简洁实现
  3. 在OpenCV中利用卷积进行图像滤波
  4. 关于举办第十五届全国大学生智能汽车竞赛浙江赛区选拔赛的通知(草案)
  5. MySQL · 最佳实践 · 如何索引JSON字段
  6. Asp.net ajax、Anthem.net、Ajax pro三大ajax框架论坛网友比较
  7. Web开发HTTP中URI和URL的情感纠葛
  8. 通过wifi无法连接手机调试
  9. lua学习 第二章数据与标准库
  10. 解决Mac电脑连接校园网不弹出登陆窗口问题汇总
  11. Android6.0 源码修改之屏蔽系统短信功能和来电功能
  12. c++判断整数翻转溢出_C++整数溢出
  13. 图像细化 A fast parallel algorithm for thinning digital patterns
  14. 区块链通证经济的核心不在技术,而在于商业逻辑的重构
  15. 论文学习笔记 POSEIDON: Privacy-Preserving Federated Neural Network Learning
  16. webstorm热更新
  17. 【PowerQuery】在Excel中手动刷新数据连接
  18. seaborn可视化01,涵盖几乎所有用法
  19. 超简单的_ps抠图_在线抠图工具_智能抠图_速抠图
  20. Android P HAL层添加HIDL实例(详细实现步骤)

热门文章

  1. 1965 - 2019 年最流行的编程语言变化
  2. python散点图如何设置外边框_如何绘制散点图的外围边框?
  3. 8类网线利弊_网线买机制成品还是自己DIY?有这些点要注意
  4. c语言枚举入门,C语言入门之枚举与位运算(1)
  5. 用matlab画出M1和M2的ROC曲线,ROC曲线及其matlab实现ROC曲线的绘画
  6. mysql noinstall 安装_mysql-noinstall安装指南
  7. ios 百度地图指定区域_ios百度地图的使用(普通定位、反地理编码)
  8. IPv6应用普及,任重而道远
  9. nodejs + ts 配置
  10. BaseAdapter封装 实现万能适配器