C# 如何使用格式字符串从十进制中获取整数?

C# 如何使用格式字符串从十进制中获取整数?,c#,.net,C#,.net,按照 “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 i

按照

“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
来做)

D
用于整数类型-整数、长等。使用
F0
表示定点,小数点后有0位

十进制不是整数类型吗

Decimal不是整数类型。Decimal是一种浮点类型

我怀疑你不知道“积分”这个词是什么意思。“整数”是整数:0,1,2,3及其负数,-1,-2,-3,依此类推。它们没有小数部分

小数被称为“小数”,因为它们包含一个小数部分,其底部的幂为10,因此称为“小数”,即10

因此小数不是整数类型。C#中的整数类型定义为
int
uint
long
ulong
short
ushort
byte
sbyte

“正常”浮点--
双精度
浮点
--底部有一个二次幂的小数部分。这些是“二进制”浮动

如何从小数中只得到整数部分?(我知道我可以使用Math.Truncate(val)来完成,但我正在寻找是否可以使用DataFormatString来完成)

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

您可能想知道“定点”和“浮点”之间有什么区别
decimal
double
float
都具有分数底部可以变化的属性,即“float”。也就是说,小数可以是
123.45
123.456
123.456789
。文档将格式化程序称为“定点”格式化程序,因为一旦你说出小数点后有多少位,你就会得到多少位。如果您在
123.45
上使用
F3
,您将得到
123.450
;名额是“固定”的

如何从小数中只得到整数部分?(我知道我可以使用Math.Truncate(val)来完成,但我正在寻找是否可以使用DataFormatString来完成)

可以指定格式字符串中所需的小数位数。如果放置
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

从小数中获取整数部分的另一种方法是将其转换为整数:

int wholeNumberPart = (int)1.9999M;  // result is '1'
此格式仅支持整数类型。-整数类型是整数
int wholeNumberPart = (int)1.9999M;  // result is '1'