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

Unity C#中如何实现文本计数按K、M单位格式化显示

Unity C# 数值单位自动缩写实现方案

直接按量级做阈值匹配+格式化处理即可,下面是可直接复用的实现,完全覆盖K、M单位的显示规则,同时兼容负数、浮点数输入场景。

核心实现代码

把下面的静态工具类放到项目里即可直接调用:

using System;

public static class NumberFormatTool
{
    // 量级配置按从大到小排序,匹配时优先命中大单位
    private static readonly (long threshold, string unit)[] _units = new[]
    {
        (1000000000, "B"), // 十亿单位,不需要可直接删除
        (1000000, "M"),
        (1000, "K"),
        (1, "")
    };

    /// <summary>
    /// 数值转带缩写单位的显示文本
    /// </summary>
    /// <param name="value">待处理的整数值</param>
    /// <returns>格式化结果,如1K、1.2K、1.1M</returns>
    public static string AbbreviateNumber(long value)
    {
        bool isNegative = value < 0;
        long absValue = Math.Abs(value);

        foreach (var (threshold, unit) in _units)
        {
            if (absValue >= threshold)
            {
                double formattedVal = absValue / (double)threshold;
                // 整数值不显示小数位,非整数值默认保留1位小数
                string numStr = formattedVal % 1 == 0 
                    ? formattedVal.ToString("0") 
                    : formattedVal.ToString("0.#");
                return $"{(isNegative ? "-" : "")}{numStr}{unit}";
            }
        }
        return value.ToString();
    }

    // 浮点数重载,兼容小数输入
    public static string AbbreviateNumber(double value)
    {
        return AbbreviateNumber((long)Math.Round(value, MidpointRounding.AwayFromZero));
    }
}

调用示例

直接在业务逻辑里调用静态方法,传入数值即可拿到格式化后的文本:

Debug.Log(NumberFormatTool.AbbreviateNumber(987));     // 输出:987
Debug.Log(NumberFormatTool.AbbreviateNumber(1000));    // 输出:1K
Debug.Log(NumberFormatTool.AbbreviateNumber(1200));    // 输出:1.2K
Debug.Log(NumberFormatTool.AbbreviateNumber(1000000)); // 输出:1M
Debug.Log(NumberFormatTool.AbbreviateNumber(1100000)); // 输出:1.1M
Debug.Log(NumberFormatTool.AbbreviateNumber(-1500));   // 输出:-1.5K

自定义调整说明

  • 单位调整:不需要十亿(B)单位直接删除_units数组里的对应行即可,要新增万亿(T)等更大单位,按相同格式把配置加到数组最前端就行
  • 小数位调整:默认非整数值保留1位小数、整数值不显示小数位,如果要固定小数位,修改ToString的格式化参数即可:固定1位用"0.0",最多保留2位用"0.##"
  • 超大数兼容:如果业务里有超过long取值范围的数值,把方法参数类型替换为decimal即可,核心逻辑不需要改动
  • UI自动适配:可以给Text/TextMeshPro组件挂个简单的绑定脚本,监听数值变化事件自动调用格式化方法赋值,不用每次手动拼接文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:18:21