gpt4 book ai didi

c# - Unity格式化多个数字

转载 作者:太空宇宙 更新时间:2023-11-03 12:20:53 26 4
gpt4 key购买 nike

所以我是 unity 和 c# 的新手,我正在尝试制作我的第一个移动增量游戏。我知道如何从(例如)1000 >>> 1k 格式化一个变量,但是我有几个变量可以达到 decillion+,所以我想必须分别检查每个变量的值高达 decillion+ 将是非常低效的。作为一个新手,我不确定该怎么做,也许是 for 循环之类的?

编辑:我正在检查 x 是否大于某个值。例如,如果它大于 1,000,则显示 1k。如果大于1,000,000,则显示1m...等等

这是我当前用于检查 x 是否大于 1000 的代码,但我认为将其复制粘贴到其他值不会非常有效;

如果(总现金 > 1000)

    {
totalCashk = totalCash / 1000;
totalCashTxt.text = "$" + totalCashk.ToString("F1") + "k";
}

最佳答案

所以,我同意复制代码效率不高。这就是人们发明函数的原因!如何简单地将您的格式包装到功能中,例如。名为 prettyCurrency?

所以你可以简单地写:

totalCashTxt.text = prettyCurrency(totalCashk);

此外,您可以使用以 10 为底的对数来处理这种情况,而不是编写大量的 ifs 来确定位数。下面的纯 C# 示例:

using System.IO;
using System;

class Program
{
// Very simple example, gonna throw exception for numbers bigger than 10^12
static readonly string[] suffixes = {"", "k", "M", "G"};
static string prettyCurrency(long cash, string prefix="$")
{
int k;
if(cash == 0)
k = 0; // log10 of 0 is not valid
else
k = (int)(Math.Log10(cash) / 3); // get number of digits and divide by 3
var dividor = Math.Pow(10,k*3); // actual number we print
var text = prefix + (cash/dividor).ToString("F1") + suffixes[k];
return text;
}

static void Main()
{
Console.WriteLine(prettyCurrency(0));
Console.WriteLine(prettyCurrency(333));
Console.WriteLine(prettyCurrency(3145));
Console.WriteLine(prettyCurrency(314512455));
Console.WriteLine(prettyCurrency(31451242545));
}
}

输出:

$0.0
$333.0
$3.1k
$314.5M
$31.5G

此外,您可能会考虑引入一种新类型,它将此函数实现为其 ToString() 重载。

编辑:我忘记了输入中的 0,现在它已修复。事实上,正如@Draco18s 在他的评论中所说,intlong 都无法处理非常大的数字,因此您可以使用像 BigInteger 这样的外部库或者切换到 double ,当数字变得越来越大时,这将失去他的精度。 (例如 1000000000000000.0 + 1 可能等于 1000000000000000.0)。如果您选择后者,您应该更改我的函数以处理范围 (0.0,1.0) 内的数字,其中 log10 为负数。

关于c# - Unity格式化多个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47369553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com