0

我有以下代码:

double a = 8/ 3;
Response.Write(a);

它返回值 2。为什么?我需要至少一位十进制数字。2.6 或 2.66 之类的东西。我怎样才能得到这样的结果?

4

5 回答 5

9

尝试

double a = 8/3.0d;

或者

double a = 8.0d/3;

以获得准确的答案。

由于在表达式中a = 8/3两个操作数都是int如此,因此结果int与它存储在double. 结果总是在较高数据类型的操作数中

编辑

回答

8 和 3 是从变量中获得的。我可以做某种演员吗?

如果值来自变量,您可以将其中一个操作数转换为double

int b = 8;
int c = 3;
double a = ((double) b) /c;
于 2012-09-10T10:18:22.560 回答
3

因为计算是以整数类型而不是双精度进行的。要使其双重使用:

double a = 8d/ 3d;
Response.Write(a);

或者

double a = 8.0/ 3.0;
Response.Write(a);

您的操作数之一应通过使用d或指定小数点显式标记为双精度0

或者,如果您需要,您可以在计算之前将它们转换为双倍。您可以将一个或两个操作数转换为 double。

double a = ((double) 8)/((double)3)
于 2012-09-10T10:19:04.850 回答
0

因为 8 和 3 是整数,解释器将其四舍五入为 2。您可以简单地建议解释器您的数字是浮点数:

double a = (double)8 / 3;
于 2012-09-10T10:23:58.197 回答
0

因为它对负数进行四舍五入,所以它是在框架中实现的方式。但是,如果您使用上面的示例指定精度:

double a = 8/3.0d;

然后不再执行舍入。

或者简单来说,您将整数值分配给双精度数,这就是首先执行舍入的原因。它看到了一个整数运算。

于 2012-09-10T10:19:36.967 回答
0

因为 8 和 3 都是整数。并且 int 的除法运算符包含两个 int 也返回 int。(当光标在斜杠上时 F12)。

于 2012-09-10T10:33:59.607 回答