我有这个:
double result = 60 / 23;
在我的程序中,结果为2,但正确的是2,608695652173913。哪里有问题?
答案 0 :(得分:51)
60和23是整数文字,因此您要进行整数除法,然后分配给double。整数除法的结果是2。
尝试
double result = 60.0 / 23.0;
或等效
double result = 60d / 23d;
d后缀通知编译器你打算写一个双字面。
答案 1 :(得分:18)
您可以使用以下任何一项 2.60869565217391 :
double result = 60 / 23d;
double result = 60d / 23;
double result = 60d/ 23d;
double result = 60.0 / 23.0;
但是
double result = 60 / 23; //give 2
<强>解释强>
如果任何一个数字为双,则会给出双重
修改强>
<强>文档强>
表达式的评估根据以下规则进行:
如果其中一个浮点类型为double,则表达式的计算结果为double(或者在关系表达式或布尔表达式的情况下为bool)。
如果表达式中没有double类型,则计算为float(或者在关系表达式或布尔表达式的情况下为bool)。
答案 2 :(得分:9)
它会起作用
double result = (double)60 / (double) 23;
或等效
double result = (double)60 / 23;
答案 3 :(得分:3)
(双)60/23
答案 4 :(得分:3)
暂时没有使用过C#,但是你要划分两个整数,据我记得这个整数也是一个整数。
你可以通过添加字母“d”强制你的数字文字加倍,喜欢这样:
double result = 60d / 23d;
答案 5 :(得分:3)
double result = 60.0 / 23.0;
答案 6 :(得分:2)
最佳做法是正确装饰适当类型的数字。这不仅可以避免您遇到的错误,还可以使代码更具可读性和可维护性。
double x = 100d;
single x = 100f;
decimal x = 100m;
答案 7 :(得分:1)
将被除数和除数转换为double值,因此结果为double double res = 60d / 23d;
答案 8 :(得分:0)
添加到目前为止所说的内容... 60/23是对两个常量的操作。编译器将结果识别为常量并预先计算答案。由于操作是两个整数,编译器使用整数结果60/23的整数运算结果为2;所以编译器有效创建以下代码:
double result = 2;
正如已经指出的那样,你需要告诉编译器不要使用整数,将一个或两个操作数更改为非整数将使编译器使用浮点常量。