Home > Blockchain >  How to convert from big number to short plus Exp?
How to convert from big number to short plus Exp?

Time:04-30

Maybe I just didn't sleep enough today and can't think clearly enough today:

I have big numbers, and I have an array of Exp "big number names". I want to get the Exponent of the big number and then display the big number as a decimal value big number label.

string[] exponent = 
    {
        "Mil",
        "Bil",
        "Tri",
        "Qua",
        "Qui",
        "Sex",
        "Sep",
        "Oct",
        "Non",
    };

double value = 1230000000;
if(value > 1000000)
{
  int pow = (int)(value / 1000000);
  res = value.ToString("#.##")   exponent[pow] ;
}

Expected output I want would be:

1.23Bil

but I'm clearly not converting value correctly.

CodePudding user response:

Using the logarithm base 10 will get you the nearest power of 10 to the number, but you need to round to the nearest multiple of 3 of the power of ten (you really want the log base 1000).

Then you need to divide the value by that power of 1000 to get the matching mantissa:

string res;
if(value >= 1e6) {
  int pow = ((int)Math.Log10(value))/3;
  res = (value/Math.Pow(10, 3*pow)).Dump().ToString("#.##")   exponent[pow-2] ;
}
else
    res = value.ToString();
  • Related