?
Solved

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

Posted on 2012-09-11
3
Medium Priority
?
751 Views
Last Modified: 2012-09-11
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,
0
Comment
Question by:JSW21
3 Comments
 
LVL 12

Accepted Solution

by:
Amick earned 2000 total points
ID: 38386242
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";
}
alert(x);
0
 
LVL 45

Expert Comment

by:AndyAinscow
ID: 38386332
>>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 Closing Comment

by:JSW21
ID: 38386348
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

Featured Post

Nothing ever in the clear!

This technical paper will help you implement VMware’s VM encryption as well as implement Veeam encryption which together will achieve the nothing ever in the clear goal. If a bad guy steals VMs, backups or traffic they get nothing.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
Simulator games are perfect for generating sample realistic data streams, especially for learning data analysis. It is even useful for demoing offerings such as Azure stream analytics, PowerBI etc.
When cloud platforms entered the scene, users and companies jumped on board to take advantage of the many benefits, like the ability to work and connect with company information from various locations. What many didn't foresee was the increased risk…
With just a little bit of  SQL and VBA, many doors open to cool things like synchronize a list box to display data relevant to other information on a form.  If you have never written code or looked at an SQL statement before, no problem! ...  give i…
Suggested Courses

850 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question