/** * Calculates the required maximum y-value in order to be able to provide the desired number of * label entries and rounded label values. */ private void prepareYLabels() { int labelCount = mYLabels.getLabelCount(); double range = mCurrentData.getYMax() - mYChartMin; double rawInterval = range / labelCount; double interval = Utils.roundToNextSignificant(rawInterval); double intervalMagnitude = Math.pow(10, (int) Math.log10(interval)); int intervalSigDigit = (int) (interval / intervalMagnitude); if (intervalSigDigit > 5) { // Use one order of magnitude higher, to avoid intervals like 0.9 or // 90 interval = Math.floor(10 * intervalMagnitude); } double first = Math.ceil(mYChartMin / interval) * interval; double last = Utils.nextUp(Math.floor(mCurrentData.getYMax() / interval) * interval); double f; int n = 0; for (f = first; f <= last; f += interval) { ++n; } mYLabels.mEntryCount = n; mYChartMax = (float) interval * n; // calc delta mDeltaY = Math.abs(mYChartMax - mYChartMin); }