diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/units/MeasureUnitImpl.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/units/MeasureUnitImpl.java
index d46487d..ec64cf5 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/impl/units/MeasureUnitImpl.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/units/MeasureUnitImpl.java
@@ -474,7 +474,7 @@
         }
 
         private static int getTrieIndex(MeasureUnit.SIPrefix prefix) {
-            return prefix.getSiPrefixPower() + UnitsData.Constants.kSIPrefixOffset;
+            return prefix.getPower() + UnitsData.Constants.kSIPrefixOffset;
         }
 
         private MeasureUnitImpl parse() {
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/units/SingleUnitImpl.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/units/SingleUnitImpl.java
index 1bec1c7..1ac0d51 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/impl/units/SingleUnitImpl.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/units/SingleUnitImpl.java
@@ -105,10 +105,10 @@
         if (index > other.index) {
             return 1;
         }
-        if (this.getSiPrefix().getSiPrefixPower() < other.getSiPrefix().getSiPrefixPower()) {
+        if (this.getSiPrefix().getPower() < other.getSiPrefix().getPower()) {
             return -1;
         }
-        if (this.getSiPrefix().getSiPrefixPower() > other.getSiPrefix().getSiPrefixPower()) {
+        if (this.getSiPrefix().getPower() > other.getSiPrefix().getPower()) {
             return 1;
         }
         return 0;
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/units/UnitConverter.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/units/UnitConverter.java
index 7a38852..b3d4902 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/impl/units/UnitConverter.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/units/UnitConverter.java
@@ -205,9 +205,9 @@
                 return result;
             }
 
-            BigDecimal siApplied = BigDecimal.valueOf(Math.pow(10.0, Math.abs(siPrefix.getSiPrefixPower())));
+            BigDecimal siApplied = BigDecimal.valueOf(Math.pow(10.0, Math.abs(siPrefix.getPower())));
 
-            if (siPrefix.getSiPrefixPower() < 0) {
+            if (siPrefix.getPower() < 0) {
                 result.factorDen = this.factorDen.multiply(siApplied);
                 return result;
             }
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java b/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java
index 9f23eaa..9688950 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/util/MeasureUnit.java
@@ -8,20 +8,6 @@
  */
 package com.ibm.icu.util;
 
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Set;
-
 import com.ibm.icu.impl.CollectionSet;
 import com.ibm.icu.impl.ICUData;
 import com.ibm.icu.impl.ICUResourceBundle;
@@ -31,6 +17,20 @@
 import com.ibm.icu.impl.units.SingleUnitImpl;
 import com.ibm.icu.text.UnicodeSet;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 
 /**
  * A unit such as length, mass, volume, currency, etc.  A unit is
@@ -293,20 +293,32 @@
          */
         YOCTO(-24, "yocto");
 
-        private final int siPrefixPower;
+        private final int power;
         private final String identifier;
 
-        SIPrefix(int siPrefixPower, String identifier) {
-            this.siPrefixPower = siPrefixPower;
+        SIPrefix(int power, String identifier) {
+            this.power = power;
             this.identifier = identifier;
         }
 
+        /*
+         * Returns the identifier of the prefix.
+         *
+         * @draft ICU 68
+         * @provisional This API might change or be removed in a future release.
+         */
         public String getIdentifier() {
             return identifier;
         }
 
-        public int getSiPrefixPower() {
-            return siPrefixPower;
+        /*
+         * Returns the power of 10 of the prefix. For example, if the prefix is "centi", the power will be -2.
+         *
+         * @draft ICU 68
+         * @provisional This API might change or be removed in a future release.
+         */
+        public int getPower() {
+            return power;
         }
     }
 
