如何对度量前缀(千、兆、千兆等)进行编码并对其进行计算

本文关键字:编码 计算 前缀 度量 | 更新日期: 2023-09-27 18:25:35

我正在尝试用untity和c#制作一个关于数字的游戏。

然而,我需要巨大数字(千、兆、千兆等)的度量前缀

到目前为止,我做过这样的事情:

normal += 9;
  if(normal >= 999)
  {
    normal = 0;
    kilo += 1;
  }
  if(kilo >= 999)
  {
    kilo = 0;
    mega += 1;
  }

但我遇到了一个问题,当号码变成981 990 999时,正常号码会重置,而不是1008

此外,我如何对前缀进行计算?

编辑#1:

我必须对象(统一)当我点击对象"ASDAD"我得到钱,当我点击"QQQ"我买东西

该代码用于ASDAD

public float normal;
    public float kilo;
    public float mega;
    public float x;
    public GUIText Displayer;

    void Start () 
    {

    }
    void OnMouseDown ()
    {
        if (gameObject.name=="ASDASD")
        {
        normal =normal + 90000;
        if(normal > 99999)
        {
           x=normal-100000;
           normal = 0;
           kilo = kilo + 1 + x/100000f;

        }
        }
    }

    void Update ()
    {
        if (kilo==0)
           Displayer.text = "" + normal.ToString("n0");
        else if (kilo >=1)
            Displayer.text="" + (kilo*100+normal/1000).ToString("n0") + "K";


    }
}

现在我该如何做第二个目标代码?(买东西)

如何对度量前缀(千、兆、千兆等)进行编码并对其进行计算

我认为你选择了错误的方式。您应该有一个价格变量和一个将其转换为文本表示的函数。的答案

我最近创建了这个函数:

string[] prefixeSI = {"y", "z", "a", "f","p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"};
string numStr(double num)
{
    int log10 = (int)Math.Log10(Math.Abs(num));
    if(log10 < -27)
      return "0.000";
    if(log10 % -3 < 0 )
        log10 -= 3;
    int log1000 = Math.Max(-8, Math.Min(log10 / 3, 8));
    return ((double)num / Math.Pow(10, log1000 * 3)).ToString("###.###" + prefixeSI[log1000+8]);
}

Console.WriteLine(numStr(1000000)); // 1M
Console.WriteLine(numStr(100000));  // 100k
Console.WriteLine(numStr(10000));   // 10k
Console.WriteLine(numStr(1000));    // 1k
Console.WriteLine(numStr(100));     // 100
Console.WriteLine(numStr(10));      // 10
Console.WriteLine(numStr(1));       // 1
Console.WriteLine(numStr(0));       // 0.000
Console.WriteLine(numStr(0.1));     // 100m
Console.WriteLine(numStr(0.01));    // 10m
Console.WriteLine(numStr(0.001));   // 1m
Console.WriteLine(numStr(0.0001));  // 100µ
//Over Yotta
Console.WriteLine(numStr(4545689486541536356525425482.64786));// 4545.689Y
//Under yocto
Console.WriteLine(numStr(-0.000000000000000000000001));       // -1y
Console.WriteLine(numStr(-0.000000000000000000000000001));    // -.001y
Console.WriteLine(numStr(-0.0000000000000000000000000001));   // 0.000

这看起来不错,但当你有一个小于0.001y的数字时,你可以看到极限:它什么都不写!(但是,我很少使用10E-27=P这样的数字)

当然,您可以删除"If(log10<-27)",但它只会为0和10E-27 等数字返回"y"