Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么双a=8/3返回2?_C#_.net_Double - Fatal编程技术网

C# 为什么双a=8/3返回2?

C# 为什么双a=8/3返回2?,c#,.net,double,C#,.net,Double,我有以下代码: double a = 8/ 3; Response.Write(a); 它返回值2。为什么?我需要至少一个十进制数字。大约2.6或2.66。我怎样才能得到这样的结果呢?试试看 double a = 8/3.0d; 或 为了得到准确的答案 因为在表达式a=8/3中,两个操作数都是int,所以结果都是int,而不管它是否存储在double中。结果总是以较高的操作数数据类型显示 编辑 答 8和3是从变量中获取的。我能做一个演员吗 如果值来自变量,则可以将其中一个操作数强制转换为双精

我有以下代码:

double a = 8/ 3;
Response.Write(a);
它返回值2。为什么?我需要至少一个十进制数字。大约2.6或2.66。我怎样才能得到这样的结果呢?

试试看

double a = 8/3.0d;

为了得到准确的答案

因为在表达式a=8/3中,两个操作数都是int,所以结果都是int,而不管它是否存储在double中。结果总是以较高的操作数数据类型显示

编辑 答


8和3是从变量中获取的。我能做一个演员吗

如果值来自变量,则可以将其中一个操作数强制转换为双精度类型:


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

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

应使用d或指定小数点0将其中一个操作数显式标记为双精度

或者,如果需要,可以在计算之前将其转换为两倍。可以将一个或两个操作数强制转换为双精度

double a = ((double) 8)/((double)3)

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

double a = 8/3.0d;
然后不再执行舍入


或者简单地说,您为double指定了一个整数值,这就是为什么首先执行舍入。它看到了一个整数运算。

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

double a = (double)8 / 3;

因为8和3都是整数。int的除法运算符中有两个int,它也返回int。F12当光标位于斜杠符号上时。

8和3是从变量中获取的。我能做一种石膏吗?它不是圆的。它对两个整数执行计算,并返回一个整数2,该整数2隐式转换为双精度。我理解,但由于计算是在整数中进行的,因此结果不会返回精确的整数,因此返回2.6,但是,正如你所说的,计算是以整数为单位的,所以如果结果不是整数,那么它将四舍五入,因此它类似于整数。对吗?好的,从技术上讲,余数只是跳过了。不进行舍入。
double a = ((double) 8)/((double)3)
double a = 8/3.0d;
double a = (double)8 / 3;