C# 即使结果应该是十进制的,var也被强制转换为int

C# 即使结果应该是十进制的,var也被强制转换为int,c#,C#,我知道这是一个非常基本的问题,但请解释为什么会这样 var number = 7 / 2; // number is 3 decimal number = 7 /2; // still number is 3 为什么数字不是3.5?为什么它总是被铸造成int?因为数字都是整数?当您将其中一个数字强制转换为十进制数时,此操作有效。因为7/3是(int)7/(int)3。 如果您想获得一个,请使用7m/2m编译器将文本7和2解释为int。因此,该除法是一个整数除法,导致值3的int 使用var关键

我知道这是一个非常基本的问题,但请解释为什么会这样

var number = 7 / 2; // number is 3
decimal number = 7 /2; // still number is 3

为什么数字不是3.5?为什么它总是被铸造成int?因为数字都是整数?当您将其中一个数字强制转换为十进制数时,此操作有效。

因为
7/3
(int)7/(int)3
。 如果您想获得一个,请使用
7m/2m

编译器将文本
7
2
解释为
int
。因此,该除法是一个整数除法,导致值
3
int

使用
var
关键字,编译器从表达式中推断出正确的类型,导致第一行中的
number
类型为
int

在第二行中,您显式地将
number
声明为十进制,因此
7/2
返回的
int
被转换为
decimal


如果希望结果为
decimal
,则应使用以
m
结尾的正确文字:

var number = 7/2m;

如果将两个整数相除,则结果始终为整数。分母为2(更改为2.0),因此编译器将截断结果的小数部分。表达式7/2(键入
int
/
int
)将在使用整数除法时计算为整数值3。如果希望将数值文字视为十进制,在你要除法的一个数字后面加上后缀
m
(正如Rene和Manfred指出的那样),这样做就足够了
7/2m
@GiladGreen是的,这就足够了。@GiladGreen或
7m/2