我在活动中使用了饼图。当我在条目中设置一个大值时,它不能正确显示该值。
例如:
我的值是 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
类,但是我听不懂。
请以简单的方式帮助和解释。
谢谢。
答案 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