如何将大数转换为短加Exp?

How to convert from big number to short plus Exp?

可能是我今天没睡够,今天想的不够清楚:

我有大数,我有一组 Exp“大数名”。我想得到大数的指数,然后将大数显示为十进制值+大数标签。

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] ;
}

我想要的预期输出是:

12.3亿

但我显然没有正确转换值。

使用以 10 为底的对数将使您得到最接近该数字的 10 的幂,但您需要四舍五入到最接近的 3 的 10 次方的倍数(您确实需要以 1000 为底的对数)。

然后你需要将 value 除以 1000 的幂得到匹配的尾数:

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();