Ver código fonte

feat: IDR千分位

DoggyZhang 1 mês atrás
pai
commit
9de6a3ddb6

+ 83 - 38
app/src/main/java/com/adealink/weparty/util/UIUtil.kt

@@ -5,147 +5,192 @@ import com.adealink.weparty.R
 import com.adealink.weparty.module.profile.data.Gender
 import java.util.Calendar
 
-fun formatNumber(number: Float): String {
+fun formatNumber(number: Int, group: Boolean): String {
+    val locale = App.instance.languageManager.getLanguage().locale
+    return if (group) {
+        "%,d".format(locale, number)
+    } else {
+        "%d".format(locale, number)
+    }
+}
+
+fun formatNumber(number: Long, group: Boolean): String {
+    val locale = App.instance.languageManager.getLanguage().locale
+    return if (group) {
+        "%,d".format(locale, number)
+    } else {
+        "%d".format(locale, number)
+    }
+}
+
+fun formatNumber(number: Float, group: Boolean): String {
     val locale = App.instance.languageManager.getLanguage().locale
     return when {
         number % 1f == 0f -> {
             //整数
-            "%.0f".format(locale, number)
+            if (group) {
+                "%,.0f".format(locale, number)
+            } else {
+                "%.0f".format(locale, number)
+            }
         }
 
         number * 10 % 1f == 0f -> {
             //一位小数
-            "%.1f".format(locale, number * 10f / 10)
+            if (group) {
+                "%,.1f".format(locale, number * 10f / 10)
+            } else {
+                "%.1f".format(locale, number * 10f / 10)
+            }
         }
 
         else -> {
             //默认2位小数
-            "%.2f".format(locale, number * 100f / 100)
+            if (group) {
+                "%,.2f".format(locale, number * 100f / 100)
+            } else {
+                "%.2f".format(locale, number * 100f / 100)
+            }
         }
     }
 }
 
-fun formatNumber(number: Double): String {
+fun formatNumber(number: Double, group: Boolean): String {
     val locale = App.instance.languageManager.getLanguage().locale
     return when {
         number % 1.0 == 0.0 -> {
             //整数
-            "%.0f".format(locale, number)
+            if (group) {
+                "%,.0f".format(locale, number)
+            } else {
+                "%.0f".format(locale, number)
+            }
         }
 
         number * 10.0 % 1.0 == 0.0 -> {
             //一位小数
-            "%.1f".format(locale, number * 10f / 10)
+            if (group) {
+                "%,.1f".format(locale, number * 10f / 10)
+            } else {
+                "%.1f".format(locale, number * 10f / 10)
+            }
         }
 
         else -> {
             //默认2位小数
-            "%.2f".format(locale, number * 100f / 100)
+            if (group) {
+                "%,.2f".format(locale, number * 100f / 100)
+            } else {
+                "%.2f".format(locale, number * 100f / 100)
+            }
         }
     }
 }
 
-//格式化数字
-fun formatNumberStr(number: Int, omitted: Boolean = true): String {
+/**
+ *  @param omitted, 缩写
+ *  @param group, 千分位
+ */
+fun formatNumberStr(number: Int, omitted: Boolean = true, group: Boolean = false): String {
     if (!omitted) {
-        return number.toString()
+        return formatNumber(number, group)
     }
     return when {
         number < 1000 -> {
-            number.toString()
+            formatNumber(number, group)
         }
 
         number < 1000_000 -> {
             val number = (number.toFloat() / 1000)
-            "${formatNumber(number)}K"
+            "${formatNumber(number, group)}K"
         }
 
         number < 1000_000_000 -> {
             val number = (number.toFloat() / 1000_000)
-            "${formatNumber(number)}M"
+            "${formatNumber(number, group)}M"
         }
 
         else -> {
             val number = (number.toFloat() / 1000_000_000)
-            "${formatNumber(number)}B"
+            "${formatNumber(number, group)}B"
         }
     }
 }
 
-fun formatNumberStr(number: Long, omitted: Boolean = true): String {
+fun formatNumberStr(number: Long, omitted: Boolean = true, group: Boolean = false): String {
     if (!omitted) {
-        return number.toString()
+        return formatNumber(number, group)
     }
     return when {
         number < 1000 -> {
-            number.toString()
+            formatNumber(number, group)
         }
 
         number < 1000_000 -> {
             val number = (number.toDouble() / 1000)
-            "${formatNumber(number)}K"
+            "${formatNumber(number, group)}K"
         }
 
         number < 1000_000_000 -> {
             val number = (number.toDouble() / 1000_000)
-            "${formatNumber(number)}M"
+            "${formatNumber(number, group)}M"
         }
 
         else -> {
             val number = (number.toDouble() / 1000_000_000)
-            "${formatNumber(number)}B"
+            "${formatNumber(number, group)}B"
         }
     }
 }
 
-fun formatNumberStr(number: Double, omitted: Boolean = true): String {
+fun formatNumberStr(number: Double, omitted: Boolean = true, group: Boolean = false): String {
     if (!omitted) {
-        formatNumber(number)
+        return formatNumber(number, group)
     }
     return when {
         number < 1000 -> {
-            formatNumber(number)
+            formatNumber(number, group)
         }
 
         number < 1000_000 -> {
             val number = (number / 1000)
-            "${formatNumber(number)}K"
+            "${formatNumber(number, group)}K"
         }
 
         number < 1000_000_000 -> {
             val number = (number / 1000_000)
-            "${formatNumber(number)}M"
+            "${formatNumber(number, group)}M"
         }
 
         else -> {
             val number = (number / 1000_000_000)
-            "${formatNumber(number)}B"
+            "${formatNumber(number, group)}B"
         }
     }
 }
 
-fun formatNumberStr(number: Float, omitted: Boolean = true): String {
+fun formatNumberStr(number: Float, omitted: Boolean = true, group: Boolean = false): String {
     if (!omitted) {
-        formatNumber(number)
+        return formatNumber(number, group)
     }
     return when {
         number < 1000 -> {
-            formatNumber(number)
+            formatNumber(number, group)
         }
 
         number < 1000_000 -> {
             val number = (number / 1000)
-            "${formatNumber(number)}K"
+            "${formatNumber(number, group)}K"
         }
 
         number < 1000_000_000 -> {
             val number = (number / 1000_000)
-            "${formatNumber(number)}M"
+            "${formatNumber(number, group)}M"
         }
 
         else -> {
             val number = (number / 1000_000_000)
-            "${formatNumber(number)}B"
+            "${formatNumber(number, group)}B"
         }
     }
 }
@@ -153,18 +198,18 @@ fun formatNumberStr(number: Float, omitted: Boolean = true): String {
 /**
  * @param distance 单位km
  */
-fun formatDistanceStr(distance: Float, omitted: Boolean = true): String {
+fun formatDistanceStr(distance: Float, omitted: Boolean = true, group: Boolean = false): String {
     if (!omitted) {
-        "${formatNumber(distance)}Km"
+        return "${formatNumber(distance, group)}Km"
     }
     return when {
         distance < 1000 -> {
-            "${formatNumber(distance)}Km"
+            "${formatNumber(distance, group)}Km"
         }
 
         distance < 1000_000 -> {
             val distance = distance / 1000
-            "${formatNumber(distance)}Mm"
+            "${formatNumber(distance, group)}Mm"
         }
 
 //        distance < 1000_000_000 -> {
@@ -173,7 +218,7 @@ fun formatDistanceStr(distance: Float, omitted: Boolean = true): String {
 
         else -> {
             val distance = distance / 1000_000_000
-            "${formatNumber(distance)}Bm"
+            "${formatNumber(distance, group)}Bm"
         }
     }
 }

+ 9 - 1
module/wallet/src/main/java/com/adealink/weparty/wallet/recharge/adapter/RechargeItemViewBinder.kt

@@ -8,6 +8,7 @@ import com.adealink.weparty.commonui.commonSelectedDrawable
 import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
 import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
 import com.adealink.weparty.module.wallet.data.Currency
+import com.adealink.weparty.util.formatNumberStr
 import com.adealink.weparty.wallet.databinding.LayoutRechargeItemBinding
 import com.adealink.weparty.wallet.recharge.data.RechargeItemData
 import com.adealink.weparty.wallet.recharge.data.RechargeProduct.Companion.INVALID_PRODUCT
@@ -66,7 +67,14 @@ class RechargeItemViewBinder(
             holder.binding.vBg.background = null
         }
         holder.binding.tvAmount.text = item.data.amount.toString()
-        holder.binding.tvSpend.text = "${item.data.priceCurrency} ${item.data.price}"
+        holder.binding.tvSpend.text =
+            "${item.data.priceCurrency} ${
+                formatNumberStr(
+                    item.data.price,
+                    omitted = false,
+                    group = true
+                )
+            }"
 
     }