我有以下代码:
double a = 8/ 3;
Response.Write(a);
它返回值 2。为什么?我需要至少一位十进制数字。2.6 或 2.66 之类的东西。我怎样才能得到这样的结果?
尝试
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;
因为计算是以整数类型而不是双精度进行的。要使其双重使用:
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)
因为 8 和 3 是整数,解释器将其四舍五入为 2。您可以简单地建议解释器您的数字是浮点数:
double a = (double)8 / 3;
因为它对负数进行四舍五入,所以它是在框架中实现的方式。但是,如果您使用上面的示例指定精度:
double a = 8/3.0d;
然后不再执行舍入。
或者简单来说,您将整数值分配给双精度数,这就是首先执行舍入的原因。它看到了一个整数运算。
因为 8 和 3 都是整数。并且 int 的除法运算符包含两个 int 也返回 int。(当光标在斜杠上时 F12)。