Introduction
This snippet returns the first N digits of a number without converting the number to string
.
Background
I was asked by my senior colleague to make a method which takes two arguments as input, first the number and second the number of digits to be returned from the first argument number, but the restriction was not to convert it to string
.
Using the 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:
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 was:
Result1: 666
Result2: 98765
Result3: 1234567
Result4: 3
Result5: 666555
Points of Interest
The thing that took me some time was to figure out how to determine the number of digits the input number has, but after some effort and research, I was able to get to it.
History
- 04/28/2016: Initial version
- 04/30/2016: Documentation addition as suggested in comments
- 05/03/2016 Handled case of
0
and negative numbers