如何使用格式字符串从decimal类型获取整数?D格式符报错问题
C#中
D格式说明符为何无法作用于decimal类型? 刚好碰到过这个问题,给你梳理下:
在C#里,D(十进制)格式说明符的设计目标是将整数类型转换为由0-9组成的纯十进制字符串,负数会自动带上负号,但它从一开始就不支持decimal类型——如果强行对decimal变量使用D格式,就会抛出Format specifier was invalid.的异常,比如下面的代码:
var val = 1234.00M; // 执行这行会抛出异常:Format specifier was invalid. string.Format("{0:D}", val); // 这行同样会抛出相同的异常 val.ToString("D");
如果你想实现类似D格式的效果(即显示无小数位的数字字符串),可以根据你的需求选择这些替代方案:
- 如果你能确定
decimal的值是整数(比如示例中的1234.00M),可以先将它转换为整数类型(如int或long)再使用D格式:var val = 1234.00M; string result = ((int)val).ToString("D"); // 输出 "1234" - 如果不确定值是否为整数,或者想安全地保留整数部分显示,可以使用
F0格式符(自动去掉小数部分并四舍五入),或者自定义格式字符串:var val = 1234.56M; // 使用F0,输出四舍五入后的整数部分 string result1 = val.ToString("F0"); // 输出 "1235" // 使用自定义格式,直接取整数部分 string result2 = val.ToString("#"); // 输出 "1235"
内容的提问来源于stack exchange,提问作者LP13
相关产品推荐
相关产品推荐

