c#中1/252 = 0?

时间:2010-09-01 19:57:06

标签: c#

我正在进行计算,在调试时发现了这个:

double num = 1/252;

当我调试它时,num被设置为零(0)。是否有一个原因?我想把它作为实际计算。

由于

3 个答案:

答案 0 :(得分:30)

是 - 该计算正在整数算术中执行。试试这个:

double num = 1.0 / 252.0;

基本上,分配结果的变量类型不会影响正在执行的算术运算。将一个整数除以另一个整数的结果是整数;如果要使用浮点运算,则需要使一个或其他操作数成为浮点类型。用文字做一个简单的方法就是在结尾贴上“.0”。另一种方法是使用d后缀:

double num = 1d / 252d;

请注意,您只需要使一个操作数成为一个浮点值才能工作,但为了清楚起见,我可能会在这种情况下同时执行这两个操作。

当然,使用文字很容易,但对于其他表达式(变量,方法调用的结果等),你需要使用强制转换:

int x = 1;
int y = 252;
double num = (double) x / (double) y;

同样,你只需要投出其中一个,所以这也会有效:

int x = 1;
int y = 252;
double num = (double) x / y;

请注意,这不是特定于除法 - 它也影响其他算术运算符。

答案 1 :(得分:9)

1和252都是文字整数,因此计算使用整数数学。 0是最接近的整数结果。使用1.0或252.0获得正确的双精度值。

答案 2 :(得分:7)

你正在划分2个整数并投射到一个双,

double num = 1d/252d;