Fixing kmb formatting

feature/top10
Laurent 7 years ago
parent 8bcfdc8356
commit 30e2b30eb5
  1. 8
      app/src/main/java/net/pokeranalytics/android/ui/graph/AxisFormatter.kt
  2. 7
      app/src/main/java/net/pokeranalytics/android/util/extensions/NumbersExtension.kt
  3. 12
      app/src/test/java/net/pokeranalytics/android/BasicUnitTest.kt

@ -8,11 +8,11 @@ import kotlin.math.roundToInt
class LargeNumberFormatter : ValueFormatter() {
override fun getFormattedValue(value: Float): String {
return value.kmbFormatted
return value.kmbFormatted()
}
override fun getAxisLabel(value: Float, axis: AxisBase?): String {
return value.roundToInt().kmbFormatted
return value.roundToInt().kmbFormatted()
}
}
@ -20,11 +20,11 @@ class LargeNumberFormatter : ValueFormatter() {
class HourFormatter : ValueFormatter() {
override fun getFormattedValue(value: Float): String {
return value.kmbFormatted + "H"
return value.kmbFormatted() + "H"
}
override fun getAxisLabel(value: Float, axis: AxisBase?): String {
val test = value.kmbFormatted + "H"
val test = value.kmbFormatted() + "H"
return test
}

@ -7,14 +7,15 @@ import java.text.DecimalFormat
import java.text.NumberFormat
import java.util.*
val Number.kmbFormatted: String
get() {
fun Number.kmbFormatted(threshold: Double = 10000.0): String {
var thousandsExponent = 0
var v = this.toDouble()
while (abs(v) >= 10000 && thousandsExponent < 3) {
if (abs(v) >= threshold) {
while (abs(v) >= 1000 && thousandsExponent < 3) {
v /= 1000
thousandsExponent++
}
}
val unit = when (thousandsExponent) {
0 -> ""

@ -19,13 +19,15 @@ class BasicUnitTest : RealmUnitTest() {
val n3 = n2 * n2 // 1M
val n4 = n3 * n2 // 1B
val s1 = n1.kmbFormatted
val s2 = n2.kmbFormatted
val s3 = n3.kmbFormatted
val s4 = n4.kmbFormatted
val s1 = n1.kmbFormatted()
val s2 = n2.kmbFormatted()
val s2b = n2.kmbFormatted(1000.0)
val s3 = n3.kmbFormatted()
val s4 = n4.kmbFormatted()
Assert.assertEquals("100", s1)
Assert.assertEquals("1K", s2)
// Assert.assertEquals("1/e000", s2) // weird error Expected :1 000, Actual :1 000
Assert.assertEquals("1K", s2b)
Assert.assertEquals("1M", s3)
Assert.assertEquals("1B", s4)

Loading…
Cancel
Save