# algorithm ideas for number shorten with 1 Million = 1M, 1 Thousand = 1K etc.

I have a set of numbers to be plot as histogram chart. The Y scale need a short legend for divisor such as M = million, K = thousand .

I need a logic so that the y scale show a meaningful numbers - and also all data will be divided by that divisor.

The set of number changed randomly for each new plot - so algorithm need to work when there are large and small numbers plot together. - no log scale is necessary.

Numbers will not goes below 0 but can be as high as billions.

How should i calculate for divisor, e.g. using average number or max/min etc.
BR,
###### Who is Participating?

Commented:
Having a range of results vary between 0 and billions is unusual, but you will ordinarily find the scale of the greatest number, then treat all members of the result set the same.

Assuming a maximum value of x you could do this:

var x=1234567890;  //the number to be evaluated
var e=0;                    //to accumulate the scale
var i=x;                     //a working variable

//Find the number's scale or order of decimal magnitude
while (i > 1) {
i=i/10;
e++;
}

//Once you have determined the scale for the maximum value in the set, treat all members of the set the same way.

if (e>=9) {
x=x/1E9+"B";
}else if (e>=6) {
x=x/1E6+"M";
}else if (e>=3) {
x=x/1E3+"K";
}
0

Freelance programmer / ConsultantCommented:
>>Numbers will not goes below 0 but can be as high as billions.

If that really means that ALL plots will be from zero upwards then use the suggestion by Amick.

However if you mean you could have a range of eg. 1,000,000 to 1,000,200 - all values within a range of 200 but with a start of 1 million then you will need to find the minimum and maximum values and use the difference to calculate the actual intervals that make sense.

ps. re Amicks suggestion you could also convert to a string and use the length.  eg.  "123456789" is 9 chars long = billions
0

Author Commented:
They are stock volume so they can get varies.

So basically fine the largest magnitude then convert all other numbers.

But One thing - I then need to make sure - Y scale support decimal point - or - it will show 0 on the scale. thanks.

PS. Thanks for other comments but points were given earlier.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.