Android の進歩への道 - 損益額の書式設定

金融アプリでは、金額や数字は比較的デリケートで一般的です。金融業界で学んだ表面的なことだけを記録します。今後、新しいシナリオに遭遇した場合は、この記事に追加します。

この記事の大部分は、基本的な知識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("--")

Guess you like

Origin blog.csdn.net/qq_20451879/article/details/132898316