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

如何将整数格式化为1、1K、51M这类简化字符串?

整数简化格式化实现与C#格式符详解

先修正你现有代码的bug

你现在这段代码有个坑:num / 1_000是整数除法,比如1100除以1000会直接截断成1,输出就变成"1K",根本出不来你要的"1,1K"。得改成浮点数除法:num / 1000.0,这样才能得到带小数的结果。

核心:把那些格式符说透

你提到的0.#、#,0K都是C#的自定义数字格式字符串,逐个拆解明白:

1. 基础占位符:0 和

  • 0:强制占位符,不管有没有意义,对应位置必须显示数字,缺的补0。比如:
    • 1.0.ToString("0.0") → 输出"1.0"
    • 1.ToString("000") → 输出"001"
  • #:可选占位符,只显示有意义的数字,末尾的0直接省略。比如:
    • 1.0.ToString("0.#") → 输出"1"
    • 1.1.ToString("0.#") → 输出"1.1"
    • 1.05.ToString("0.#") → 输出"1.1"(自动四舍五入)

2. 缩放符:逗号","

这个是你可能没搞懂的点——格式里的逗号不是千位分隔符,是缩放说明符,每加一个逗号,就把原数字除以1000。比如:

  • 1000.ToString("0,") → 1000/1000=1 → 输出"1"
  • 1100.ToString("0.0,") → 1100/1000=1.1 → 输出"1.1"
  • 1000000.ToString("0,,") → 1000000/1000/1000=1 → 输出"1"

3. 常见组合格式对比

  • 0.#:你代码里用的,把除以1000后的数,保留整数位+最多一位小数(末尾0自动丢)。测试下:
    • 1000/1000.0=1 → 输出"1"
    • 1100/1000.0=1.1 → 输出"1.1"
    • 1050/1000.0=1.05 → 输出"1.1"(四舍五入)
  • #,0K:这里的逗号是缩放符,相当于先把数字除以1000,再用0格式取整,最后加K。比如:
    • 1000.ToString("#,0K") → "1K"
    • 1100.ToString("#,0K") → "1K"(1.1取整成1)
    • 10000.ToString("#,0K") → "10K"

满足你所有示例的完整代码

要覆盖你给的所有情况(1→1,1000→1K,1100→1,1K,11000→10K,1000000→1M),得分区间处理,还得对应调整格式:

public class NumberFormatter
{
    public string FormatNumber(int num)
    {
        // 小于1000,直接输出原数
        if (num < 1000)
        {
            return num.ToString();
        }
        // 1000到999999,用K做单位
        else if (num < 1_000_000)
        {
            // 如果你要11000→10K这种取整到10倍的效果,就用这段
            var kValue = Math.Floor((num / 1000.0) / 10) * 10;
            return kValue.ToString("0") + "K";
            
            // 要是想11000→11K,就换成这个:
            // return (num / 1000.0).ToString("0.#") + "K";
        }
        // 100万及以上,用M做单位
        else
        {
            return (num / 1_000_000.0).ToString("0.#") + "M";
        }
    }
}

测试效果完全匹配你的示例:

  • 1 → "1"
  • 100 → "100"
  • 1000 → "1K"
  • 1100 → "1.1K"
  • 11000 → "10K"
  • 100000 → "100K"
  • 1000000 → "1M"

按需自定义的小技巧

根据你的需求改格式符就行:

  • 强制保留一位小数:用0.0,比如1000→"1.0K"
  • 只保留整数位:用0,比如1100→"1K"
  • 保留两位小数:用0.##,比如1150→"1.15K"
  • 要更大的单位(比如G),再加个else if区间,除以10亿即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:05:16