Android进阶之路 - 盈利、亏损金额格式化

在金融类型的app中,关于金额、数字都相对敏感和常见一些,在此仅记录我在金融行业期间学到的皮毛,如后续遇到新的场景也会加入该篇

该篇大多采用 Kotlin 扩展函数的方式进行记录,尽可能熟悉 Kotlin 基础知识

兄弟 Blog

  • StringUtils、NumberUtils 场景源码
  • Java、Android工具整理 - 单位换算

了解该篇后,会有一些常见的搭配使用方式

  • 收益 千分位、+、- 、变色 显示
    在这里插入图片描述

使用方式

 textView.text = data.rateString()textView.textColor = data.rateColor()
  • 收益 +、- 、%、变色 显示

在这里插入图片描述

使用方式

 textView.text = data.rateYieldString()textView.textColor = data.rateColor()

在这里插入图片描述

项目实战

    • toInt、toDouble
    • 千分位
    • 盈利、亏损
      • +、-
      • 变色
      • %

toInt、toDouble

我们为了显示效果,将金额做了千分位处理,所以当我们使用数据时需要去除千分位中的间隔符(,),该处扩展函数主要为了兼容千分位处理,并不影响原始的 toInttoDouble 执行逻辑

fun String?.toInt(defaultValue: Int = 0): Int {if (this.isNullOrEmpty()) return defaultValuereturn this.replace(",", "").toDoubleOrNull()?.toInt() ?: defaultValue
}inline fun String?.toInt(black: () -> Int): Int {try {if (this.isNullOrEmpty()) {return black.invoke()}return Integer.parseInt(this.replace(",", ""))} catch (throwable: Throwable) {Timber.e(throwable, "String?.toInt")}return black.invoke()
}fun String?.toDouble(defaultValue: Double = 0.00): Double {if (this.isNullOrEmpty()) return defaultValuereturn this.replace(",", "").toDoubleOrNull() ?: defaultValue
}

千分位

我们常见的数字可能不太会讲究千分位间隔显示效果,但是这种显示方式在金融型app中很常见, 针对金额太大的场景时通常会进行千分位处理,无数据场景一般会显示 --

/*** 千分位*/
fun String?.toThousand(defaultValue: String = ""): String {try {if (this.isNullOrEmpty()) return defaultValueif (this == "--") return thisval value = this.replace(",", "").toDoubleOrNull() ?: return defaultValueval decimalFormat = if (contains(".") && length - indexOf(".") == 4) {DecimalFormat("###,##0.000")} else if (contains(".") && length - indexOf(".") == 5) {DecimalFormat("###,##0.0000")} else {DecimalFormat("###,##0.00")}return decimalFormat.format(value)} catch (throwable: Throwable) {Timber.e(throwable)}return defaultValue
}

使用示例

未处理金额:1000.00
处理后金额:1,000.00

 textView.text = data.toThousand("--")

盈利、亏损

我们看股票、基金时经常可以看到盈利、亏损时的表现形式都有所不同,例如+、-号的表示,以及 盈利为红色、亏损为绿色、未变化为灰色或黑色

+、-

fun String?.rateString(): String {if (this.isNullOrEmpty()) return "--"return if (toDouble() > 0.000001) {"+${toThousand()}"} else {toThousand()}
}

使用示例

 textView.text = data.rateString()

变色

盈利为红、亏损为绿、未变化为黑色(自行改变色值即可)

fun String?.rateColor(): Int {val value = toDouble()return when {value > 0.00001 -> "#CF1F1F"value < -0.00001 -> "#569C83"else -> "#333333"}.toColorInt()
}

使用示例

textView.textColor = data.rateColor()

在这里插入图片描述

因为我在开发中采用了 html 方式实现富本文,所以简化了 toColorInt 转化

fun String?.rateColorString(): String {val value = toDouble()return when {value > 0.00001 -> "#CF1F1F"value < -0.00001 -> "#569C83"else -> "#333333"}
}

使用示例

 textView.htmlString = "涨跌幅:<font color='${data.rateColorString()}'>${data.rateYieldString()}</font>"}

%

fun String?.rateYieldString(): String {if (this.isNullOrEmpty()) return "--"return if (toDouble() > 0.000001) {"+${toThousand()}%"} else {"${toThousand()}%"}
}

使用示例

 textView.text = data.rateYieldString("--")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/139952.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

趣解设计模式之《小王的糖果售卖机》

〇、小故事 小王最近一直在寻找商机&#xff0c;他发现商场儿童乐园或者中小学校周围&#xff0c;会有很多小朋友喜欢吃糖果&#xff0c;那么他想设计一款糖果售卖机&#xff0c;让后将这些糖果售卖机布置到商场和学校旁边&#xff0c;这样就能获得源源不断的收益了。 想到这里…

并查集题目

并查集是一种十分常用并且好用的数据结构 并查集可以动态维护若干个不重叠的集合&#xff0c;支持合并与查询操作&#xff0c;是一种树形的数据结构 并查集的基础应用 村村通 对于这道题我们只需要求连通块的数量&#xff0c;然后将这几个联通快看成点&#xff0c;我们可以知…

【华为云云耀云服务器L实例评测|云原生】自定制轻量化表单Docker快速部署云耀云服务器

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

笔记2.2:网络应用基本原理

一. 网络应用的体系结构 &#xff08;1&#xff09;客户机/服务器结构&#xff08;Client-Server, C/S&#xff09; &#xff08;2&#xff09;点对点结构&#xff08;Peer-to-Peer&#xff0c;P2P&#xff09; &#xff08;3&#xff09;混合结构&#xff08;Hybrid&#x…

大数据学习技术栈及书籍推荐

作为一名开发人员&#xff0c;特别是后端开发人员&#xff0c;随着网络数据量的持续增长&#xff0c;拥有强大的大数据处理能力已经成为每个公司或产品&#xff08;尤其是2C业务&#xff09;的必备条件。以下是我在网络上搜集和自身研究的基础上&#xff0c;为您推荐的技术栈和…

【python】Seaborn画热力图,只显示第一行数字---seaborn与matplotlib版本问题

github上有这个讨论&#xff1a;Heatmap only has annotation text in the top row only Issue #3478 mwaskom/seaborn (github.com)翻译过来就是&#xff1a;热图仅在最上面一行有注释文本&#xff1b; 原因就是matplotlib 在2023年9月更新到了 3.8.0版本&#xff0c;改变了…

大数据Flink(八十三):SQL语法的DML:With、SELECT WHERE、SELECT DISTINCT 子句

文章目录 SQL语法的DML:With、SELECT & WHERE、SELECT DISTINCT 子句 一、DML:With 子句

c语言 static

1、静态局部变量在程序加载时初始化&#xff0c;静态局部变量的初始值写入到了data段&#xff1a; 如下代码test_symbol.c int f() {static int x 0;return x; }int g() {static int x 9;return x; }使用命令gcc -c test_symbol.c -o test_symbol 编译 使用命令 readelf -a …

Web ui自动化测试框架总结

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程&#xff0c;刷完面试就稳了&#xff0c;你也可以当高薪软件测试工程师&#xff08;自动化测试&#xff09; 实施过了web系统的UI自动化&#xff0c;回顾梳理下&#xff0c;想到什么写什么&#xff0c;随时补充。 首…

数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...

全文链接:http://tecdat.cn/?p27384 在本文中&#xff0c;数据包含有关葡萄牙“Vinho Verde”葡萄酒的信息&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 介绍 该数据集&#xff08;查看文末了解数据获取方式&#xff09;有1599个观测值和12个变量&#xf…

windows安装c环境

一. 下载安装mingw-w64 mingw-w64 解压后放到window环境变量路径 sysdm.cpl参看是否安装成功 二. 安装c idea Dev-Cpp下载及安装 新建文件 运行 编译&#xff08;F9&#xff09;、运行&#xff08;F10&#xff09;以及编译运行&#xff08;F11&#xff09; 参考 安装C…

Guava Cache介绍-面试用

一、Guava Cache简介 1、简介 Guava Cache是本地缓存&#xff0c;数据读写都在一个进程内&#xff0c;相对于分布式缓存redis&#xff0c;不需要网络传输的过程&#xff0c;访问速度很快&#xff0c;同时也受到 JVM 内存的制约&#xff0c;无法在数据量较多的场景下使用。 基…

图像处理之频域滤波DFT

摘要&#xff1a;傅里叶变换可以将任何满足相应数学条件的信号转换为不同系数的简单正弦和余弦函数的和。图像信号也是一种信号&#xff0c;只不过是二维离散信号&#xff0c;通过傅里叶变换对图像进行变换可以图像存空域转换为频域进行更多的处理。本文主要简要描述傅里叶变换…

Spring面试题11:什么是Spring的依赖注入

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的依赖注入 依赖注入(Dependency Injection)是Spring框架的一个核心特性,它是指通过外部容器将对象的依赖关系注入到对象中,从而…

win10 关闭edge跳转IE浏览器

按下windows键&#xff0c;搜索控制面板 右上角输入IE 点击IE 高级中取消下红框选择即可

接口自动化测试之Requests模块详解

Python中&#xff0c;系统自带的urllib和urllib2都提供了功能强大的HTTP支持&#xff0c;但是API接口确实太难用了。Requests 作为更高一层的封装&#xff0c;在大部分情况下对得起它的slogan——HTTP for Humans。 让我们一起来看看 Requests 这个 HTTP库在我们接口自动化测试…

Spring面试题15:Spring支持几种bean的作用域?singleton、prototype、request的区别是什么?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring支持几种bean的作用域? Spring支持以下几种Bean的作用域: Singleton(单例):这是Spring默认的作用域。使用@Scope(“singleton”)注解或…

web前端的float布局与flex布局

flex布局 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>flex</title><style>.container{width: 100%;height: 100px;background-color: aqua;display: flex;flex-direction: row;justify-content: space-ar…

使用 rtty 进行远程 Linux 维护和调试

rtty 是一个用于在终端上进行远程连接和数据传输的工具。它提供了一种简单的方式来与远程设备进行通信&#xff0c;使得在不同主机之间传输数据变得更加方便。 安装 rtty 是一个可执行程序&#xff0c;可以在 Linux、macOS 和 Windows 等平台上使用。 Linux/macOS 在终端中执…

web二级操作题

js和css的引入 在 HTML 中&#xff0c;你可以使用 <script> 和 <link> 标签来引入外部的 JavaScript 文件和 CSS 文件。 引入外部的 JavaScript 文件&#xff1a; <script src"path/to/script.js"></script>src 属性指定了 JavaScript 文…