diff --git a/lib/versioning/hex/index.spec.ts b/lib/versioning/hex/index.spec.ts
index 03b77d3c66e14a960fb7a6d753f6bfb614702ec8..b6579867251fba2a8a295cf463327bbdba318909 100644
--- a/lib/versioning/hex/index.spec.ts
+++ b/lib/versioning/hex/index.spec.ts
@@ -128,7 +128,15 @@ describe('lib/versioning/hex', () => {
           fromVersion: '1.2.3',
           toVersion: '2.0.7',
         })
-      ).toEqual('~> 2');
+      ).toEqual('~> 2.0');
+      expect(
+        hexScheme.getNewValue({
+          currentValue: '~> 1.2',
+          rangeStrategy: 'bump',
+          fromVersion: '1.2.3',
+          toVersion: '1.3.1',
+        })
+      ).toEqual('~> 1.3');
       expect(
         hexScheme.getNewValue({
           currentValue: '~> 1.2.0',
diff --git a/lib/versioning/hex/index.ts b/lib/versioning/hex/index.ts
index c1a6d61263dde243169a9e725711f99f942c0693..b5219e6318901d05bdc43f62633efc364c154064 100644
--- a/lib/versioning/hex/index.ts
+++ b/lib/versioning/hex/index.ts
@@ -69,10 +69,16 @@ const getNewValue = ({
     toVersion,
   });
   newSemver = npm2hex(newSemver);
-  if (/~>\s*(\d+\.\d+)$/.test(currentValue)) {
+  if (/~>\s*(\d+\.\d+\.\d+)$/.test(currentValue)) {
     newSemver = newSemver.replace(
-      /\^\s*(\d+\.\d+(\.\d)?)/,
-      (_str, p1: string) => `~> ${p1.slice(0, -2)}`
+      /[\^~]\s*(\d+\.\d+\.\d+)/,
+      (_str, p1: string) => `~> ${p1}`
+    );
+  } else if (/~>\s*(\d+\.\d+)$/.test(currentValue)) {
+    newSemver = newSemver.replace(
+      /\^\s*(\d+\.\d+)/,
+      (_str, p1: string) =>
+        `~> ${rangeStrategy !== 'bump' ? p1.slice(0, -2) : p1}`
     );
   } else {
     newSemver = newSemver.replace(/~\s*(\d+\.\d+\.\d)/, '~> $1');