价格精度处理规则如下:
-
如果整数位数≤ 6 位,则整数位+小数位要小于等于 7 位,超过 7 位的从第 8 位开始直接抹去,抹去后将结尾剩余的 0 省略,例如
- 123.123435115=123.1234
- 123456.12345=123456.1
- 123.1200456=123.12
-
如果整数位>6 位,则仅展示整数位,例如
- 1234567.12634=1234567
-
如果整数位等于 0, 小数位从十分位开始(包括 10 分位)到第一个不为零的数,如果有 4 个以下连续的 0,则小数位最大保留 6 位精度,第 7 位直接抹去,抹去后将结尾剩余的 0 省略,例如
- 0.00012345=0.000123
- 0.00123045=0.00123
-
如果整数位是 0, 小数位从十分位开始(包括 10 分位)到第一个不为零的数,如果有 大于等于 4 个连续的 0,则需要将这些 0 折叠展示为 0{连续 0 的数量},再至多展示后面 4 位数,第 5 位直接抹去,抹去后将结尾剩余的 0 省略,例如
- 0.000012345=0.0{4}1234
- 0.00000120034=0.0{5}12
实现代码如下:
fun String.formatPrice(): String {
var result = this
try {
if (this.contains(".")) {
val array = this.split(".")
if (array[0].length > 6) {
result = array[0]
} else {
if (array[0] == "0") {
var count = 0
var isOver = false
array[1].forEach {
if (it == '0') {
if (!isOver) count += 1
} else {
isOver = true
}
}
val numbers = if (count < 4) {
try {
array[1].substring(0, 6)
} catch (e: Exception) {
e.printStackTrace()
array[1]
}
} else {
try {
"0{$count}".plus(array[1].substring(count, count + 4))
} catch (e: Exception) {
e.printStackTrace()
"0{$count}".plus(array[1].substring(count))
}
}
result = array[0].plus(".$numbers")
} else {
if (this.length > 7) {
result = this.substring(0, 8)
}
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
return result
}
续
期待各位提供不同的解法