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

C#中Decimal类型ToString时如何在任意文化下去除小数点、逗号及小数部分?

解决C# Decimal转无分隔符整数字符串的问题

嘿,我来帮你搞定这个问题!你想要的是把decimal转成完全没有小数点、千分符,也不带小数部分的字符串,而且不管系统是什么文化区域都能生效对吧?

首先说你之前用InvariantCulture配合"N0"的问题:"N0"是数字格式,它的作用是保留0位小数,但会自动添加千分分隔符(InvariantCulture里是逗号,而有些欧洲文化里会用小数点当千分符,这就是你看到小数点的原因),所以这个格式不符合你的需求。

下面给你几个靠谱的实现方式,按推荐程度排序:

1. 最优方案:自定义格式字符串 + 截断(可选)

如果需要截断小数部分(不四舍五入),先通过Math.Truncate去掉小数位,再用"0"格式配合InvariantCulture:

decimal myDecimal = 1234.99m;
// 截断小数部分,得到纯整数的decimal
decimal truncated = Math.Truncate(myDecimal);
// 转成无任何分隔符的字符串
string result = truncated.ToString("0", CultureInfo.InvariantCulture);
// 输出:"1234"

如果可以接受四舍五入到整数,直接用"0"格式就行:

decimal myDecimal = 1234.99m;
string result = myDecimal.ToString("0", CultureInfo.InvariantCulture);
// 输出:"1235"

这里用"0"而不是"#"的原因是:如果decimal的值是0m,"#"会输出空字符串,而"0"会正常输出"0",更符合大多数场景的需求。

2. 整数转换法(仅限decimal值在整数类型范围内)

如果你的decimal值肯定不会超过long的范围(也就是-9223372036854775808到9223372036854775807之间),可以直接转成整数类型再ToString:

decimal myDecimal = 1234.56m;
string result = ((long)myDecimal).ToString();
// 输出:"1234"

这个方法简单,但要注意:如果decimal值超出整数范围,会抛出OverflowException,所以只适合确定值不会溢出的场景。

3. 自定义NumberFormatInfo(略繁琐)

你也可以手动创建一个NumberFormatInfo,把所有分隔符都设为空,再用数字格式:

var customFormat = new NumberFormatInfo
{
    NumberDecimalSeparator = "",
    NumberGroupSeparator = "",
    NumberDecimalDigits = 0
};
decimal myDecimal = 1234.56m;
string result = myDecimal.ToString("N", customFormat);
// 输出:"1234"

这个方法也能生效,但比第一种方案麻烦,一般不推荐。

最后再强调下:不管用哪种方法,一定要指定InvariantCulture(或者自定义的NumberFormatInfo),不然系统会用当前线程的文化设置,可能出现你不想要的分隔符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:15:52