You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#在Unity中实现类似Cash Inc的分阶大额货币系统?

分阶货币系统实现方案

现有代码问题分析

  • 类型选择错误:int 类型最大值仅为2147483647,完全无法满足放置类游戏后期超大数值需求,且整数除法会丢失小数精度,导致格式化后数值缺失小数位
  • 逻辑错误:1亿(100000000)区间的除数误用10亿(1000000000),会导致该区间数值格式化后返回0B的错误结果
  • 扩展性差:单位仅写死支持到B(十亿),且用多分支硬编码判断,后续新增高阶单位需要大量修改代码
  • 逻辑冗余:10万、1万区间的判断规则完全重复,没有必要

最优实现方案

1. 数值类型选择

根据需求的数值范围选择对应类型即可:

  • 数值上限不超过7.9e28:直接用decimal类型,无浮点精度误差,性能足够
  • 需要无上限超大数值:引入System.Numerics.BigInteger,Unity 2021及以上版本原生支持,旧版本可导入第三方轻量BigInteger库实现

2. 优化后的格式化代码

无需硬编码分支判断,动态计算阶位对应单位,可支持任意高阶单位扩展:

using System;

public static class CurrencyFormatter
{
    // 按Cash Inc的单位规则扩展,可按需新增后续单位
    private static readonly string[] _units = { "", "K", "M", "B", "T", "aa", "ab", "ac", "ad", "ae", "af", "ag" };

    public static string Format(decimal amount)
    {
        if (amount < 1000)
        {
            return amount.ToString("#,0");
        }

        int unitIndex = 0;
        decimal adjustedAmount = amount;

        while (adjustedAmount >= 1000 && unitIndex < _units.Length - 1)
        {
            adjustedAmount /= 1000;
            unitIndex++;
        }

        // 保留1位小数,不需要则修改格式字符串为"0"
        return adjustedAmount.ToString("0.#") + _units[unitIndex];
    }

    // BigInteger版本适配
    public static string Format(System.Numerics.BigInteger amount)
    {
        if (amount < 1000)
        {
            return amount.ToString("#,0");
        }

        int unitIndex = 0;
        decimal adjustedAmount = (decimal)amount;

        while (adjustedAmount >= 1000 && unitIndex < _units.Length - 1)
        {
            adjustedAmount /= 1000;
            unitIndex++;
        }

        return adjustedAmount.ToString("0.#") + _units[unitIndex];
    }
}

3. 自定义调整说明

  • 需要调整保留小数位数:修改ToString的格式字符串,固定1位小数用"0.0",不需要小数用"0"
  • 需要新增高阶单位:直接在_units数组末尾追加对应单位字符串即可,无需修改逻辑代码
  • 需要和Cash Inc显示规则完全对齐:可根据游戏实际规则调整阶位阈值,比如部分区间显示整数、部分区间显示小数,添加对应分支判断即可

内容的提问来源于stack exchange,提问作者ChilledOwl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:06:08