Introduction
This code snippet returns the first N digits of a number without converting the number to the string.
Background
I was asked by my senior colleague to make a method, which takes two arguments as an input. First is the number and second is the number of digits to be returned from the first argument number, but the restriction was not to convert it to the string.
Code
I came up with this method, which worked pretty well for me.
-
-
-
-
-
-
- private static int takeNDigits(int number, int N)
- {
-
- number =Math.Abs(number);
-
-
- if(number == 0)
- return number;
-
-
- int numberOfDigits = (int)Math.Floor(Math.Log10(number) + 1);
-
-
- if (numberOfDigits >= N)
- return (int)Math.Truncate((number / Math.Pow(10, numberOfDigits - N)));
- else
- return number;
- }
I tested with some inputs, which are given below.
- int Result1 = takeNDigits(666, 4);
- int Result2 = takeNDigits(987654321, 5);
- int Result3 = takeNDigits(123456789, 7);
- int Result4 = takeNDigits(35445, 1);
- int Result5 = takeNDigits(666555, 6);
The output is shown below.
- Result1: 666
- Result2: 98765
- Result3: 1234567
- Result4: 3
- Result5: 666555