懒得勤快 4 éve
szülő
commit
ed92b0820b
1 módosított fájl, 36 hozzáadás és 4 törlés
  1. 36 4
      Masuit.Tools.Abstractions/Strings/NumberFormater.cs

+ 36 - 4
Masuit.Tools.Abstractions/Strings/NumberFormater.cs

@@ -79,13 +79,22 @@ namespace Masuit.Tools.Strings
         /// <returns></returns>
         public string ToString(long number)
         {
+            int start = 0;
+            int resultOffset = 0;
+            if (_offset > 0)
+            {
+                start = 1;
+                resultOffset = _offset - 1;
+            }
+
+            number = number - resultOffset;
             List<string> result = new List<string>();
             long t = Math.Abs(number);
             while (t != 0)
             {
                 var mod = t % Length;
                 t = Math.Abs(t / Length);
-                var character = Characters[Convert.ToInt32(mod) - _offset].ToString();
+                var character = Characters[Convert.ToInt32(mod) - start].ToString();
                 result.Insert(0, character);
             }
 
@@ -104,6 +113,15 @@ namespace Masuit.Tools.Strings
         /// <returns></returns>
         public string ToString(BigInteger number)
         {
+            int start = 0;
+            int resultOffset = 0;
+            if (_offset > 0)
+            {
+                start = 1;
+                resultOffset = _offset - 1;
+            }
+
+            number = number - resultOffset;
             List<string> result = new List<string>();
             if (number < 0)
             {
@@ -117,7 +135,7 @@ namespace Masuit.Tools.Strings
             {
                 var mod = t % Length;
                 t = BigInteger.Abs(BigInteger.Divide(t, Length));
-                var character = Characters[(int)mod - _offset].ToString();
+                var character = Characters[(int)mod - start].ToString();
                 result.Insert(0, character);
             }
 
@@ -131,8 +149,15 @@ namespace Masuit.Tools.Strings
         /// <returns></returns>
         public long FromString(string str)
         {
+            int start = 0;
+            int resultOffset = 0;
+            if (_offset > 0)
+            {
+                start = 1;
+                resultOffset = _offset - 1;
+            }
             int j = 0;
-            return new string(str.ToCharArray().Reverse().ToArray()).Where(ch => Characters.Contains(ch)).Sum(ch => (Characters.IndexOf(ch) + _offset) * (long)Math.Pow(Length, j++));
+            return new string(str.ToCharArray().Reverse().ToArray()).Where(ch => Characters.Contains(ch)).Sum(ch => (Characters.IndexOf(ch) + start) * (long)Math.Pow(Length, j++)) + resultOffset;
         }
 
         /// <summary>
@@ -142,9 +167,16 @@ namespace Masuit.Tools.Strings
         /// <returns></returns>
         public BigInteger FromStringBig(string str)
         {
+            int start = 0;
+            int resultOffset = 0;
+            if (_offset > 0)
+            {
+                start = 1;
+                resultOffset = _offset - 1;
+            }
             int j = 0;
             var chars = new string(str.ToCharArray().Reverse().ToArray()).Where(ch => Characters.Contains(ch));
-            return chars.Aggregate(BigInteger.Zero, (current, c) => current + (Characters.IndexOf(c) + _offset) * BigInteger.Pow(Length, j++));
+            return chars.Aggregate(BigInteger.Zero, (current, c) => current + (Characters.IndexOf(c) + start) * BigInteger.Pow(Length, j++)) + resultOffset;
         }
 
         /// <summary>Returns a string that represents the current object.</summary>