使用MpAndroidChart在饼图中显示大数字(双值)

时间:2018-11-17 16:09:41

标签: android double pie-chart mpandroidchart

我在活动中使用了饼图。当我在条目中设置一个大值时,它不能正确显示该值。

例如:

我的值是 627050000 ,但是图表显示的是 627049986

我的值是 477470000 ,但图表显示的是 477470016

这是我的代码

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);

    double num1 = 627050000 ;
    double num2 = 477470000 ;

    setupPieChart();
}

private void setupPieChart() {

    List<PieEntry> pieEntries = new ArrayList<>();

    pieEntries.add(new PieEntry((float) num1 , "num1"));
    pieEntries.add(new PieEntry((float) num2 , "num2"));

    PieDataSet dataSet = new PieDataSet(pieEntries , "numbers");

    PieData data = new PieData(dataSet);
    PieChart pieChart = (PieChart) findViewById(R.id.piechart);
    pieChart.setTransparentCircleAlpha(1);
    pieChart.getDescription().setEnabled(false);

    //add legend to chart

    Legend legend = pieChart.getLegend();
    legend.setForm(Legend.LegendForm.CIRCLE);
    legend.setOrientation(Legend.LegendOrientation.VERTICAL);
    legend.setDirection(Legend.LegendDirection.RIGHT_TO_LEFT);
    legend.setPosition(Legend.LegendPosition.RIGHT_OF_CHART);

    //add colors to dataset

    ArrayList<Integer> colors = new ArrayList<>();
    colors.add(Color.CYAN);
    colors.add(Color.GREEN);
    colors.add(Color.RED);

    dataSet.setColors(colors);

    pieChart.setData(data);
    pieChart.animateY(1000);
    pieChart.invalidate();
}

我也使用BigDecimal读过ValueFormatter类,但是我听不懂。 请以简单的方式帮助和解释。

谢谢。

1 个答案:

答案 0 :(得分:0)

发生这种情况是因为您将双数转换为浮点数。 MPAndroidChart将绘制一个带有浮点值的条目。您定义了double num1 = 627050000;,但将其存储为new PieEntry((float) num1 , "num1")

请注意:

  

float:float数据类型是单精度32位IEEE 754   浮点...。如果需要保存,请使用浮点(而不是双精度)   大型浮点数数组中的内存。此数据类型   切勿将其用于精确值,例如货币。为了那个原因,   您将需要改用java.math.BigDecimal类

     

double:double数据类型是双精度64位IEEE 754   浮点。 对于十进制值,此数据类型通常为   默认选择。如上所述,此数据类型永远不能   用于精确值,例如货币。

source

在上述转换中,您会丢失数字的精度。 将值定义为float而不是double