如何使用Format String从十进制中获取整数?

时间:2018-04-20 18:47:26

标签: c# .net

根据documentation

  

" 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完成

3 个答案:

答案 0 :(得分:4)

  

十进制不是整数类型吗?

十进制不是一个整数类型。十进制是浮点类型。

我怀疑你不知道"积分"手段。 "整数"是整数:0,1,2,3及其负数,-1,-2,-3等等。它们没有零件。

小数被称为"小数"因为它们包含一个在底部具有10的幂的小数部分,因此" deci",10。

因此小数不是整数类型。 C#中的整数类型定义为intuintlongulongshortushortbytesbyte

"正常"浮点数 - doublefloat - 有一个小数部分,底部有2的幂。这些是"二进制"浮动。

  

如何从十进制中仅获取整数? (我知道我可以使用Math.Truncate(val)来做,但我在寻找是否可以使用DataFormatString来完成)

由于decimal是浮点类型,因此您可以使用定点类型说明符F。有关详细信息,请参阅文档。

你可能想知道"固定点"之间的区别是什么?和"浮点"。 decimaldoublefloat都具有分数底部可以变化的属性,或者" float"。也就是说,小数可以是123.45123.456123.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