" D" (或十进制)格式说明符将数字转换为字符串 十进制数字(0-9),如果数字为前缀,则以减号为前缀 负。仅对整数类型支持此格式。
所以它支持整数类型。
然而,它不适用于十进制
var val = 1234.00M;
// line below throws exception `Format specifier was invalid.`
string.Format("{0:D}", val);
// line below throws exception `Format specifier was invalid.`
val.ToString("D");
但是,如果我将val
类型从decimal
更改为integer
,那么它就会有效。
问题
十进制不是整数类型吗?
我如何只得到小数的整数? (我知道我可以使用Math.Truncate(val)来完成它,但我在寻找是否可以使用DataFormatString
完成
答案 0 :(得分:4)
十进制不是整数类型吗?
十进制不是一个整数类型。十进制是浮点类型。
我怀疑你不知道"积分"手段。 "整数"是整数:0,1,2,3及其负数,-1,-2,-3等等。它们没有零件。
小数被称为"小数"因为它们包含一个在底部具有10的幂的小数部分,因此" deci",10。
因此小数不是整数类型。 C#中的整数类型定义为int
,uint
,long
,ulong
,short
,ushort
,byte
和sbyte
。
"正常"浮点数 - double
和float
- 有一个小数部分,底部有2的幂。这些是"二进制"浮动。
如何从十进制中仅获取整数? (我知道我可以使用Math.Truncate(val)来做,但我在寻找是否可以使用DataFormatString来完成)
由于decimal是浮点类型,因此您可以使用定点类型说明符F
。有关详细信息,请参阅文档。
你可能想知道"固定点"之间的区别是什么?和"浮点"。 decimal
,double
和float
都具有分数底部可以变化的属性,或者" float"。也就是说,小数可以是123.45
或123.456
或123.456789
。文档称格式化程序为"固定点"格式化器,因为一旦你说小数点后面有多少位数,那就是你要获得的位数。如果您在F3
上使用123.45
,则会获得123.450
;地方的数量是"固定"。
答案 1 :(得分:2)
D
用于整数类型 - 整数,长整数等。使用F0
表示固定点,小数点后面有0位。
答案 2 :(得分:1)
如何从十进制中仅获取整数? (我知道我可以使用Math.Truncate(val)来做,但我在寻找是否可以使用DataFormatString来完成)
您可以在格式字符串中指定所需的小数位数。如果您放置1: tzccftzxt
X: None
2: None
,则表示显示数字或显示0(换句话说,在此占位符中显示某些内容),如果您使用0
,则表示显示此如果存在多个有效数字(如果有更多,那么数字将四舍五入到这么多数字)。如果您不包含小数点,它只会显示数字部分:
#
请注意,将会发生舍入,这可能会导致意外结果:
decimal x = 123.45M;
Console.WriteLine(x.ToString("0")); // Output: 123
Console.WriteLine(x.ToString("0.0")); // Output: 123.5 <- note there is rounding
Console.WriteLine(x.ToString("0.00")); // Output: 123.45
Console.WriteLine(x.ToString("0.000")); // Output: 123.450
Console.WriteLine(x.ToString("#.###")); // Output: 123.45