【问题标题】:Getting decimal values in valueformatter for showing decimal values on bar in MPAndroidChart在 valueformatter 中获取十进制值以在 MPAndroidChart 中的 bar 上显示十进制值
【发布时间】:2017-01-06 03:31:07
【问题描述】:

我正在尝试显示具有十进制值的条形 grpah (MPAndroidChart)。 但图表显示它们没有小数点。 我的值格式化程序代码如下所示:

protected class MyValueFormatter implements ValueFormatter{
    @Override
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
        Log.d(Constants.TAG,"Initial value == "+value+" == "+entry.getVal());
        DecimalFormat df = new DecimalFormat("#.###");
        df.setRoundingMode(RoundingMode.CEILING);
        Log.d(Constants.TAG,"Formatted value == "+df.format(value));
        return df.format((double)value);
    }
}

以下是用于绘制图表的数据

"data":[[16003376.986129051,10003344],[25089516.75475807,20089516],[39517705.32395167,30517705],[2490973.063333333,3090973]]

下面是值格式化日志

Initial value == 1.6003376E7 == 1.6003376E7
Formatted value == 16003376
Initial value == 1.0003344E7 == 1.0003344E7
Formatted value == 10003344
Initial value == 1.6003376E7 == 1.6003376E7
Formatted value == 16003376
Initial value == 1.0003344E7 == 1.0003344E7
......many more

我担心的是:

  • 原始值由16003376.986129051转换为1.6003376E7
  • 图表将条形顶部的值显示为 16003376,因为尚未实现小数处理
  • 我如何将原始值转换为 3 位小数,因为从财务角度来看,十进制值非常重要

【问题讨论】:

标签: android mpandroidchart


【解决方案1】:

MPAndroidChart 将 y 值存储在 Entry 中作为 float。从this commonly referenced article on floating point可以看出,有些数字不能用浮点数准确表示。

不要将解析数据的原始值用作valueEntry,而是考虑将值四舍五入到小数点后三位首先。无论如何,这是一个好主意,因为我们希望保持模型层和视图层之间的关注点分离,而Entry 本质上是视图层的一部分。如果您这样做,您的ValueFormatter 将按预期执行。

所以,当您制作条目时。不要这样做:

float rawX = rawDataSource.getFloat(0);
float rawY = rawDataSource.getFloat(1);
BarEntry entry = new BarEntry(rawX,rawY); //no!! need to round first

改为这样做:

float roundedX = (float) Math.round(rawDataSource.getFloat(0) * 100.0) / 100.0;
float roundedY = (float) Math.round(rawDataSource.getFloat(0) * 100.0) / 100.0;
BarEntry entry = new BarEntry(roundedX, roundedY);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-26
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2018-10-25
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多