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
相关产品推荐
相关产品推荐

