【问题标题】:how to covert float value into integer in Y-Axis of MP android chart in Kotlin?如何在 Kotlin 的 MP android 图表的 Y 轴中将浮点值转换为整数?
【发布时间】:2021-05-22 16:39:38
【问题描述】:

我正在使用 MP 图表显示行程计数,一切正常,除了 Y 轴值显示为浮点值而不是整数。

我在 jan、feb 等中有整数值...我想在 y 轴上以整数格式显示它,但它显示为浮点值,例如。 jan =10 已转换为 10.0。

这是我正在使用的代码:

//Variables

var barData: BarData? = null
    var barDataSet: BarDataSet? = null
    var barEntries: java.util.ArrayList<BarEntry>? = null
    var jan =""
    var feb=""
    var mar=""
    var apr=""
    var may=""
    var jun=""
    var jul=""
    var aug=""
    var sep=""
    var oct=""
    var nov=""
    var dec=""

//Method to call at OnCreate
private fun getEntries() {
        barEntries = java.util.ArrayList<BarEntry>()
        myUID = userSP.getString("userId")
        myUID?.let {
            db.collection("OperatorUsers").document(it)
                    .collection("Completed Services").document(myUID!!).addSnapshotListener { value: DocumentSnapshot?, error: FirebaseFirestoreException? ->
                        try {
                            if (value!!.exists()) {
                                jan = value.getLong("january").toString()
                                feb = value.getLong("february").toString()
                                mar = value.getLong("march").toString()
                                apr = value.getLong("april").toString()
                                may = value.getLong("may").toString()
                                jun = value.getLong("june").toString()
                                jul = value.getLong("july").toString()
                                aug = value.getLong("august").toString()
                                sep = value.getLong("september").toString()
                                oct = value.getLong("october").toString()
                                nov = value.getLong("november").toString()
                                dec = value.getLong("december").toString()
                                setBarChart()
                            }
                        } catch (e: java.lang.Exception) {
                            e.printStackTrace()
                            Log.d("fs", e.message!!)
                            setBarChart()
                        }
                    }
        }
    }

private fun setBarChart() {
        if (jan != "null") {
            barEntries?.add(BarEntry(1f, jan.toFloat()))
        } else {
            barEntries?.add(BarEntry(1f, 0.0f))
        }
        if (feb != "null") {
            barEntries?.add(BarEntry(2f, feb.toFloat()))
        } else {
            barEntries?.add(BarEntry(2f, 0.0f))
        }
        if (mar != "null") {
            barEntries?.add(BarEntry(3f, mar.toFloat()))
        } else {
            barEntries?.add(BarEntry(3f, 0.0f))
        }
        if (apr != "null") {
            barEntries?.add(BarEntry(4f, apr.toFloat()))
        } else {
            barEntries?.add(BarEntry(4f, 0.0f))
        }
        if (may != "null") {
            barEntries?.add(BarEntry(5f, may.toFloat()))
        } else {
            barEntries?.add(BarEntry(5f, 0.0f))
        }
        if (jun != "null") {
            barEntries?.add(BarEntry(6f, jun.toFloat()))
        } else {
            barEntries?.add(BarEntry(6f, 0.0f))
        }
        if (jul != "null") {
            barEntries?.add(BarEntry(7f, jul.toFloat()))
        } else {
            barEntries?.add(BarEntry(7f, 0.0f))
        }
        if (aug != "null") {
            barEntries?.add(BarEntry(8f, aug.toFloat()))
        } else {
            barEntries?.add(BarEntry(8f, 0.0f))
        }
        if (sep != "null") {
            barEntries?.add(BarEntry(9f, sep.toFloat()))
        } else {
            barEntries?.add(BarEntry(9f, 0.0f))
        }
        if (oct != "null") {
            barEntries?.add(BarEntry(10.0f, oct.toFloat()))
        } else {
            barEntries?.add(BarEntry(10.0f, 0.0f))
        }
        if (nov != "null") {
            barEntries?.add(BarEntry(11f, nov.toFloat()))
        } else {
            barEntries?.add(BarEntry(11f, 0.0f))
        }
        if (dec != "null") {
            barEntries?.add(BarEntry(12f, dec.toFloat()))
        } else {
            barEntries?.add(BarEntry(12f, 0.0f))
        }
        val labels = arrayOf("Dummy", "Jan", "Feb", "March", "April", "May",
                "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec")
        val xAxis: XAxis = mpBarChart.xAxis
        val leftAxis : YAxis = mpBarChart.axisLeft

        xAxis.valueFormatter = IndexAxisValueFormatter(labels)
        xAxis.granularity = 1f
        xAxis.isGranularityEnabled = true
        leftAxis.setGranularity(1.0f);
        leftAxis.setGranularityEnabled(true); // Required to enable granularity


        barDataSet = BarDataSet(barEntries, "No.of Trips")
        barData = BarData(barDataSet)
        mpBarChart.data=barData
        mpBarChart.description.text="Month wise Dashboard"
        barDataSet!!.setColors(*ColorTemplate.MATERIAL_COLORS)
        barDataSet!!.setValueTextSize(8f)
        barDataSet!!.setValueTextColor(Color.BLACK)
        //mpBarChart.setBackgroundResource(R.drawable.card_search)
        mpBarChart.getAxisLeft().setDrawGridLines(false)
        mpBarChart.getXAxis().setDrawGridLines(false)
        mpBarChart.getAxisRight().setDrawGridLines(false)

    }

我找到了很多答案,比如 value formatter,但它们在 java 中,我试图在 Kotlin 中转换它,但没有帮助。 所以请帮助任何人,在此先感谢!

【问题讨论】:

  • 您到底尝试了什么?在这些情况下究竟是什么不起作用?如果您不准确地告诉我们您需要什么,我们怎么知道该告诉您做什么。例如,您将如何转换5.99?应该是5 还是6(我们不知道你可能输入)?顺便说一句,您不需要那些if/else 语句,只需执行barEntries?.add(BarEntry(1f, jan.toFloat() ?: 0.0f))。同样,barEntries 首先可以为空有什么意义?将其初始化为空列表。
  • 我在 jan、feb 等中有整数值...我想在 y 轴上以整数格式显示它,但它显示为浮点值,例如。 jan =10 已转换为 10.0。

标签: android kotlin bar-chart mpandroidchart


【解决方案1】:

除了该代码存在关于 null 安全性和缺乏对 kotlin 理解的多个问题之外,您可以通过删除不必要的代码来简单地实现这一点。

  1. 你有一个DocumentSnapshot,它可以给你一个Long,但是你把它转换成一个String
  2. 然后你把那个String 变成你不想要的东西,Float
  3. 您陷入这种困境的唯一原因是您没有处理null 来自getFloat() 的可能性。

Long 是一个整数,唯一的区别是 Long 是一个 64 位整数,Int 是一个 32 位整数,所以你从一开始就已经拥有了你需要的东西。

var jan = 0L

//...//

value.getLong("january")?.let { jan = it }
//or
jan = value.getLong("january") ?: 0L

//...//

barEntries?.add(BarEntry(1f, jan))

我不知道BarEntry 的构造函数可以采用什么参数,如果它不能采用Float,请检查您正在使用的库的文档并将Long 更改为任何内容它需要。

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2022-10-29
    相关资源
    最近更新 更多