Android开发之播放量点赞量打赏量收藏量单位格式化工具类
直接上工具类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开发之播放量点赞量打赏量收藏量单位格式化工具类相关推荐
- Android开发笔记(八十六)几个特殊的类
接口interface interface是一些功能的集合,但它只定义了对象必须实现的成员,而不包含成员的实现代码,成员的具体代码由实现接口的类提供.Android对接口的使用场景主要有三类:事件监听 ...
- Android开发规范:APP版本发布(全量发布、灰度发布)
我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 全量发布 灰度发布 欢迎加入Android开发交流QQ群: app ...
- Android移动开发-Android开发日历时常用的农历和公历换算代码工具类
下面是与Android开发日历时常用的有关农历计算.公历计算.二十四气节相关的代码工具类的代码. Constant.java逻辑代码如下: package com.fukaimei.calendar. ...
- 3年Android开发工程师面试经验分享,先收藏了
前言 程序员这个行业,日新月异,技术体系更新速度快,新技术新框架层出不穷,所有的技术都像是一个无底洞,当你学得越多就会发现不懂的越多,不懂的越多,需要学习的就更多. 因此,一旦选择了这个行业,就意味着 ...
- android开发常用app有哪些,【推荐收藏】安卓开发中必备的那些神器APP
(2)当前Activity 该款软件可显示最前台页面所在应用的包名及Activity https://github.com/109021017/android-TopActivity http://p ...
- Android开发--图形图像与动画(一)--Paint和Canvas类
* Paint类 * Paint类代表画笔,用来描述图形的颜色和风格,如线宽,颜色,透明度和填充效果等信息. * 使用Paint类时,需要先创建该类的对象,可以通过该类的构造函数实现.通常情况的实 ...
- Android开发——图形编程(一)简单介绍与使用绘图类Paint、Canvas
Android图形编程基础 文章目录 Android图形编程基础 画笔Paint的 画布Canvas 自定义View的基本实现方法 实例代码 绘图绘图,首先要有的就是颜色Color Android系统 ...
- 做了一个系列的Android开发教程列表
做了一个系列的Android开发教程列表.花了半天多的专题 里面包含了 4个系列的教程. 也包含了很多Android开发资料. 喜欢的人可以收藏哦:http://dev.apkbus.com/
- Android开发笔记(序)写在前面的目录
知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入 ...
最新文章
- Nginx源码分析链接
- C++基础:C++类成员属性的一种简洁实现
- 在OpenCV中利用卷积进行图像滤波
- 关于举办第十五届全国大学生智能汽车竞赛浙江赛区选拔赛的通知(草案)
- MySQL · 最佳实践 · 如何索引JSON字段
- Asp.net ajax、Anthem.net、Ajax pro三大ajax框架论坛网友比较
- Web开发HTTP中URI和URL的情感纠葛
- 通过wifi无法连接手机调试
- lua学习 第二章数据与标准库
- 解决Mac电脑连接校园网不弹出登陆窗口问题汇总
- Android6.0 源码修改之屏蔽系统短信功能和来电功能
- c++判断整数翻转溢出_C++整数溢出
- 图像细化 A fast parallel algorithm for thinning digital patterns
- 区块链通证经济的核心不在技术,而在于商业逻辑的重构
- 论文学习笔记 POSEIDON: Privacy-Preserving Federated Neural Network Learning
- webstorm热更新
- 【PowerQuery】在Excel中手动刷新数据连接
- seaborn可视化01,涵盖几乎所有用法
- 超简单的_ps抠图_在线抠图工具_智能抠图_速抠图
- Android P HAL层添加HIDL实例(详细实现步骤)
热门文章
- 1965 - 2019 年最流行的编程语言变化
- python散点图如何设置外边框_如何绘制散点图的外围边框?
- 8类网线利弊_网线买机制成品还是自己DIY?有这些点要注意
- c语言枚举入门,C语言入门之枚举与位运算(1)
- 用matlab画出M1和M2的ROC曲线,ROC曲线及其matlab实现ROC曲线的绘画
- mysql noinstall 安装_mysql-noinstall安装指南
- ios 百度地图指定区域_ios百度地图的使用(普通定位、反地理编码)
- IPv6应用普及,任重而道远
- nodejs + ts 配置
- BaseAdapter封装 实现万能适配器