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

如何在C#中不通过除法将long值格式化为千分之一的字符串?

解决C#中Long类型数值格式化为千分之一显示的问题

你的需求很明确:把long类型的数值以原数千分之一的形式显示,但不直接修改原数值(比如除以1000)。之前尝试的{0:0,000}和{0:0.000}格式不符合预期,因为前者是千分位分隔,后者只是给原数补三位小数,没有实现小数点左移三位的效果。

下面给你两种可行的解决方案:

方案一:利用Decimal精确转换(推荐)

虽然看起来做了除以1000的操作,但这里只是在格式化时临时转换,不会修改原long变量的数值。而且decimal类型可以精确表示所有long范围内的整数,完全不用担心精度损失:

long one = 1;
long two = 1005;
long three = 100000005;
long four = 1111112258552;

// 格式化字符串:确保整数部分完整显示,小数部分固定三位
string format = "{0:0.000}";

string s1 = string.Format(format, (decimal)one / 1000m);
string s2 = string.Format(format, (decimal)two / 1000m);
string s3 = string.Format(format, (decimal)three / 1000m);
string s4 = string.Format(format, (decimal)four / 1000m);

Console.WriteLine(s1);    // 输出: 0.001
Console.WriteLine(s2);    // 输出: 1.005
Console.WriteLine(s3);    // 输出: 100000.005
Console.WriteLine(s4);    // 输出: 1111112258.552

方案二:纯字符串处理(无数值运算)

如果严格要求不进行任何数值运算,我们可以直接对long的字符串形式进行拆分和拼接,把最后三位作为小数部分:

long one = 1;
long two = 1005;
long three = 100000005;
long four = 1111112258552;

// 自定义格式化方法
string FormatAsThousandth(long num)
{
    string numStr = num.ToString();
    if (numStr.Length <= 3)
    {
        // 数字长度不足3位,补0后在开头加小数点
        return $"0.{numStr.PadLeft(3, '0')}";
    }
    else
    {
        // 拆分整数部分(除最后三位)和小数部分(最后三位)
        int splitPos = numStr.Length - 3;
        string integerPart = numStr.Substring(0, splitPos);
        string decimalPart = numStr.Substring(splitPos);
        return $"{integerPart}.{decimalPart}";
    }
}

Console.WriteLine(FormatAsThousandth(one));    // 0.001
Console.WriteLine(FormatAsThousandth(two));    // 1.005
Console.WriteLine(FormatAsThousandth(three));  // 100000.005
Console.WriteLine(FormatAsThousandth(four));   // 1111112258.552

为什么你的原有格式不生效?

  • {0:0,000}:这个格式是用来添加千分位分隔符的,比如1005会显示为1,005,和你要的小数点左移完全无关;
  • {0:0.000}:这个格式是给原数值补三位小数,比如1会显示为1.000,并没有将数值缩小一千倍,所以不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:35:44