如何在C#中除整数并得到一个双精度数?

如何在C#中除整数并得到一个双精度数?,c#,math,C#,Math,为什么我看到的是0而不是.73?在所有类似C的语言中都是如此。如果你除以两个整数,结果就是一个整数。0.73不是整数 常见的解决方法是将两个数字中的一个乘以1.0,使其成为浮点类型,或者直接将其转换为浮点类型。因为除法是用整数完成的,然后转换为双精度。请尝试以下方法: int x = 73; int y = 100; double pct = x/y; 因为操作仍在int类型上。尝试double pct=(double)x/(double)y整数除法删除结果的小数部分。请参阅:这是

为什么我看到的是0而不是.73?

在所有类似C的语言中都是如此。如果你除以两个整数,结果就是一个整数。0.73不是整数


常见的解决方法是将两个数字中的一个乘以1.0,使其成为浮点类型,或者直接将其转换为浮点类型。

因为除法是用整数完成的,然后转换为双精度。请尝试以下方法:

int x = 73;  
int y = 100;  
double pct = x/y;  

因为操作仍在int类型上。尝试
double pct=(double)x/(double)y

整数除法删除结果的小数部分。请参阅:

这是因为除法(
x
)的左侧操作数的类型是
int
,因此
x/y
的返回类型仍然是
int
。目标变量的类型为
double
不会影响操作。 要获得预期结果,首先必须将
x
转换为
double
,如下所示:

double pct = (double)x / (double)y;

理解一行代码中的执行流程很重要。假设将等式的右侧设置为
double
(在左侧)将隐式地将解决方案转换为double,这是正确的。但是,流执行表明,在到达代码的
double pct=
部分之前,x/y是由它自己计算的。因此,由于两个
int
s被彼此除以,因此在隐式转换为double之前,它们将求值为
int
解(在本例中,四舍五入为零)


正如其他人所指出的,您需要将
int
变量转换为
double
s,这样解决方案就变成了
double
,而不是
int

,只是为了完整性:将其中一个int转换为double就足够了,但将两者都转换并没有坏处:)不仅是C#,但是包括C和C++的一批其他语言。Common Lisp将返回73/100,像Perl这样缺少实际整数类型的语言将返回0.73。一个人如何获得超过6K的rep而不知道这个问题的答案?@SouceMaster:因为rep(a)不衡量能力,它衡量参与度,(b)因为OO只会问无数问题(提供答案的10倍)。meta.stackoverflow.com上对此进行了讨论。我团队的一名初级成员在谷歌搜索了一段时间后问了这个问题。我建议将其发布在软件上,以获得更快更准确的解决方案。我是对的。现在,当他在谷歌上搜索时,这篇帖子首先出现了(因此,SOF让谷歌搜索变得更好)也许您团队的初级成员应该拥有SOF帐户。哪个操作数是双精度的并不重要。
或者(double)73/100
或者
73/(double)100
都可以。如果一个操作数是双精度的,所有整数类型都将被强制为双精度。
double pct = (double)x / y;