为什么c#总是说3/2是1?

gur*_*gui 1 c# math

可能重复:
c#中的1/252 = 0?

嗨,我有一个c#的问题,我想计算一些东西.但当我得到一个表达式:

decimal test = 3 / 2;
Run Code Online (Sandbox Code Playgroud)

c#表示test = 1而不是1.5

怎么解决这个?

Jon*_*eet 11

你正在使用整数运算.如果您不想这样做,请将一个或两个操作数浮点值,例如

decimal test = 3m / 2m;
Run Code Online (Sandbox Code Playgroud)

要么

double test = 3d / 2d;
Run Code Online (Sandbox Code Playgroud)

(只有一个操作数必须是非整数类型,但我相信如果你能轻易地使两者都相同,那就更清楚了.)


Ant*_*ram 6

你正在执行截断的整数数学.将一个或两个操作数转换为十进制.

decimal test = (decimal)3 / 2;
Run Code Online (Sandbox Code Playgroud)

如果您使用变量而不是文字常量,则上述更适用,例如int a, b; decimal c = a / b;您需要事先进行强制转换以避免整数除法.

否则,在使用文字常量时,附加后缀M以指定它是小数,以避免整数数学.

decimal test = 3M / 2M;
Run Code Online (Sandbox Code Playgroud)

  • 老实说,我更喜欢:`3m/2m` (2认同)