我正在尝试显示一个条形图(MPAndroidChart),其中包含十进制值。 但图表显示没有小数。 我的值格式化程序代码如下所示:
$('.my_button').on('click', function() {
ui_tracking('button_1')
.then(startQuestion)
.then(function () {
alert('Hello');
});
});
function ui_tracking(type, payload) {
return $.ajax({
url: '/api/submit_action',
type: 'POST',
dataType: 'json',
data: {
type: type,
payload: JSON.stringify(payload)
}
});
}
function startQuestion(results) {
var deferred;
var openQuestion = function (question_data) {
$('#question-modal .modal-body .question').html(question_data.question).attr('data-question-id', question_data.id);
$('#question-modal').modal('show').on('hidden.bs.modal', function (e) {
deferred.resolve();
$('#question-modal').unbind('hidden.bs.modal');
});
};
if (results && results.data && results.data.question) {
deferred = $.Deferred();
openQuestion(results.data.question);
return deferred.promise();
}
}
以下是用于绘制图表的数据
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]]
我担心的是:
答案 0 :(得分:0)
MPAndroidChart将Entry
中的y值存储为float
。从this commonly referenced article on floating point中可以看出,有些数字无法使用浮点数准确表示。
不要将已解析数据的原始值用作value
的{{1}},而应考虑将该值舍入为3位小数第一个。无论如何,这是一个好主意,因为我们希望在模型层和视图层之间保持关注点的分离,Entry
基本上是视图层的一部分。如果您这样做,您的Entry
将按预期执行。
所以,当你进行参赛时。不要这样做:
ValueFormatter
请改为:
float rawX = rawDataSource.getFloat(0);
float rawY = rawDataSource.getFloat(1);
BarEntry entry = new BarEntry(rawX,rawY); //no!! need to round first