Fix rounding of extra spacing when it is negative.
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index 6c89f92..6de9c65 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -1012,12 +1012,12 @@
         int extra;
 
         if (needMultiply) {
-            // XXX: this looks like it is using the +0.5 and the cast to int
-            // to do rounding, but this I expect this isn't doing the intended
-            // thing when spacingmult < 1.  An intended extra of, say, -1.2
-            // will get 'rounded' to -.7 and then truncated to 0.
-            extra = (int) ((below - above) * (spacingmult - 1)
-                           + spacingadd + 0.5);
+            double ex = (below - above) * (spacingmult - 1) + spacingadd;
+            if (ex >= 0) {
+                extra = (int)(ex + 0.5);
+            } else {
+                extra = -(int)(-ex + 0.5);
+            }
         } else {
             extra = 0;
         }
diff --git a/core/tests/coretests/src/android/text/StaticLayoutTest.java b/core/tests/coretests/src/android/text/StaticLayoutTest.java
index 1e4db3d..7511ec1 100644
--- a/core/tests/coretests/src/android/text/StaticLayoutTest.java
+++ b/core/tests/coretests/src/android/text/StaticLayoutTest.java
@@ -213,13 +213,13 @@
         }
 
         public int scale(float height) {
-            int altVal = (int)(height * sMult + sAdd + 0.5); // existing impl
+            int altVal = (int)(height * sMult + sAdd + 0.5);
             int rndVal = Math.round(height * sMult + sAdd);
             if (altVal != rndVal) {
                 Log.i("Scale", "expected scale: " + rndVal +
                         " != returned scale: " + altVal);
             }
-            return altVal; // existing implementation
+            return rndVal;
         }
     }