金融アプリでは、金額や数字は比較的デリケートで一般的です。金融業界で学んだ表面的なことだけを記録します。今後、新しいシナリオに遭遇した場合は、この記事に追加します。
この記事の大部分は、基本的な知識Kotlin
をできる限り理解できるように、拡張関数の形式で記録されています。Kotlin
ブラザーブログ
この記事を理解すると、いくつかの一般的な使用方法がわかります。
- 収益
千分位、+、- 、变色
表示
使用法
textView.text = data.rateString()
textView.textColor = data.rateColor()
- 収益
+、- 、%、变色
表示
使用法
textView.text = data.rateYieldString()
textView.textColor = data.rateColor()
toInt、toDouble
エフェクトを表示するために1000分の1に加工していますので、データを使用する際は1000の位の区切り文字(,)を削除する必要があります。ここでの拡張機能は主に1000分の1の処理との互換性を図るためのものであり、影響はありません。オリジナルのtoInt
実行toDouble
ロジック
fun String?.toInt(defaultValue: Int = 0): Int {
if (this.isNullOrEmpty()) return defaultValue
return 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 defaultValue
return this.replace(",", "").toDoubleOrNull() ?: defaultValue
}
千分位
私たちの一般的な数値では、 1000 番目の,
間隔の表示効果はあまり考慮されないかもしれませんが、この表示方法は金融アプリでは非常に一般的です。金額が大きすぎるシナリオでは通常、1000 番目の処理が実行され、データがないシナリオでは、一般的には表示されます。--
/**
* 千分位
*/
fun String?.toThousand(defaultValue: String = ""): String {
try {
if (this.isNullOrEmpty()) return defaultValue
if (this == "--") return this
val value = this.replace(",", "").toDoubleOrNull() ?: return defaultValue
val 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("--")