From bf0ae22f1bf7cc334e8c5b5fcf59906f0326a99b Mon Sep 17 00:00:00 2001
From: Tim Molter <tim.molter@gmail.com>
Date: Sat, 26 Apr 2014 15:41:03 +0200
Subject: [PATCH] fixed some more decimal formatting issues

---
 .../xchart/demo/charts/date/DateChart04.java  |  2 +-
 .../xchart/demo/charts/date/DateChart05.java  |  2 +-
 .../xchart/demo/charts/line/LineChart02.java  |  2 +-
 .../xchart/demo/charts/line/LineChart04.java  |  2 +-
 .../demo/charts/scatter/ScatterChart02.java   |  2 +-
 .../AxisTickNumericalCalculator.java          |  5 ++++-
 .../internal/chartpart/NumberFormatter.java   | 19 +++++--------------
 7 files changed, 14 insertions(+), 20 deletions(-)

diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java
index cdc842dc..c3b2a527 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart04.java
@@ -62,7 +62,7 @@ public class DateChart04 implements ExampleChart {
         e.printStackTrace();
       }
       xData.add(date);
-      yData.add(Math.random() * i);
+      yData.add(Math.random() * i / 10000000000.0);
     }
 
     chart.addSeries("blah", xData, yData);
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java
index 7bca4d32..39d9b804 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/date/DateChart05.java
@@ -62,7 +62,7 @@ public class DateChart05 implements ExampleChart {
         e.printStackTrace();
       }
       xData.add(date);
-      yData.add(Math.random() * i);
+      yData.add(Math.random() * i / -100000000);
     }
 
     chart.addSeries("blah", xData, yData);
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java
index 3bbdb7a3..070c412b 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart02.java
@@ -52,7 +52,7 @@ public class LineChart02 implements ExampleChart {
     for (int i = 0; i <= size; i++) {
       double radians = (Math.PI / (size / 2) * i);
       xData.add(i - size / 2);
-      yData.add(size * Math.sin(radians));
+      yData.add(-.000001 * Math.sin(radians));
     }
 
     // Create Chart
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart04.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart04.java
index 5ca26d73..cf367556 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart04.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/line/LineChart04.java
@@ -48,7 +48,7 @@ public class LineChart04 implements ExampleChart {
     chart.getStyleManager().setLegendVisible(false);
 
     for (int i = 0; i < 200; i++) {
-      Series series = chart.addSeries("A" + i, new double[] { Math.random(), Math.random() }, new double[] { Math.random() / 1000, Math.random() / 1000 });
+      Series series = chart.addSeries("A" + i, new double[] { Math.random() / 1000, Math.random() / 1000 }, new double[] { Math.random() / -1000, Math.random() / -1000 });
       series.setLineColor(SeriesColor.BLUE);
       series.setLineStyle(SeriesLineStyle.SOLID);
       series.setMarker(SeriesMarker.CIRCLE);
diff --git a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java
index a84211ce..0cab9ca4 100644
--- a/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java
+++ b/xchart-demo/src/main/java/com/xeiam/xchart/demo/charts/scatter/ScatterChart02.java
@@ -56,7 +56,7 @@ public class ScatterChart02 implements ExampleChart {
     for (int i = 0; i < size; i++) {
       double nextRandom = random.nextDouble();
       xData.add(Math.pow(10, nextRandom * 10));
-      yData.add(1000000000.0 + nextRandom + random.nextDouble());
+      yData.add(1000000000.0 + nextRandom * 100);
     }
 
     // Create Chart
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java
index 3467ca53..89d5d6f4 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/AxisTickNumericalCalculator.java
@@ -16,6 +16,7 @@
 package com.xeiam.xchart.internal.chartpart;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 
 import com.xeiam.xchart.StyleManager;
 import com.xeiam.xchart.internal.Utils;
@@ -63,9 +64,11 @@ public class AxisTickNumericalCalculator extends AxisTickCalculator {
 
     BigDecimal gridStep = BigDecimal.valueOf(getNumericalGridStep(tickSpace));
     BigDecimal firstPosition = BigDecimal.valueOf(getFirstPosition(gridStep.doubleValue()));
+    BigDecimal scaledfirstPosition = firstPosition.setScale(16, RoundingMode.HALF_UP);
+    // System.out.println("scaledfirstPosition: " + scaledfirstPosition); // chop off any double imprecision
 
     // generate all tickLabels and tickLocations from the first to last position
-    for (BigDecimal tickPosition = firstPosition; tickPosition.compareTo(BigDecimal.valueOf(maxValue + gridStep.doubleValue() * 0.2)) <= 0; tickPosition = tickPosition.add(gridStep)) {
+    for (BigDecimal tickPosition = scaledfirstPosition; tickPosition.compareTo(BigDecimal.valueOf(maxValue + gridStep.doubleValue() * 0.2)) <= 0; tickPosition = tickPosition.add(gridStep)) {
 
       tickLabels.add(numberFormatter.formatNumber(tickPosition.doubleValue(), minValue, maxValue));
       // here we convert tickPosition finally to plot space, i.e. pixels
diff --git a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java
index a8c97832..3fd3da4b 100644
--- a/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java
+++ b/xchart/src/main/java/com/xeiam/xchart/internal/chartpart/NumberFormatter.java
@@ -62,12 +62,12 @@ public class NumberFormatter {
     System.out.println("placeOfValue: " + placeOfValue);
 
     if (placeOfDifference <= 4 && placeOfDifference >= -4) {
-      System.out.println("getNormalDecimalPattern");
+      // System.out.println("getNormalDecimalPattern");
       return getNormalDecimalPatternPositive(placeOfValue, placeOfDifference);
     }
     else {
-      System.out.println("getScientificDecimalPattern");
-      return getScientificDecimalPattern(placeOfValue, placeOfDifference);
+      // System.out.println("getScientificDecimalPattern");
+      return getScientificDecimalPattern();
     }
   }
 
@@ -97,18 +97,9 @@ public class NumberFormatter {
     return sb.toString();
   }
 
-  private String getScientificDecimalPattern(int placeOfValue, int placeOfDifference) {
+  private String getScientificDecimalPattern() {
 
-    StringBuilder sb = new StringBuilder();
-    for (int i = placeOfValue; i >= 0; i--) {
-      sb.append("0");
-      if (i == placeOfDifference) {
-        sb.append(".");
-      }
-    }
-    sb.append("E0");
-    System.out.println(sb.toString());
-    return sb.toString();
+    return "0E0";
   }
 
   /**
-- 
GitLab