我正在尝试用untiy和c#做一个关于数字的游戏。
然而,我需要为巨大的数字(千、兆、千兆等)添加公制前缀
到目前为止,我做了这样的事情:
normal += 9;
if(normal >= 999)
{
normal = 0;
kilo += 1;
}
if(kilo >= 999)
{
kilo = 0;
mega += 1;
}但是我遇到了一个问题,当数字变成981 990 999时,正常的数字被重置,而不是1008。
另外,我如何对前缀进行计算?
edit#1:
我有对象(整体)当我点击对象"ASDASD“我得到钱,当我点击对象"QQQ”我买东西
此代码用于ASDASD
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";
}
}现在我该怎么做第二个目标代码呢?(买点东西)
发布于 2014-10-06 17:45:50
我想你选错了路。您应该有一个价格变量和一个将其转换为文本表示的函数。Answer for that
发布于 2020-05-09 22:23:52
我最近创建了这个函数:
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)",但它只会返回"y“表示0和10E-27之类的数字
https://stackoverflow.com/questions/26209217
复制相似问题