【发布时间】:2010-11-12 08:39:07
【问题描述】:
我有这个:
double result = 60 / 23;
在我的程序中,结果是 2,但正确的是 2,608695652173913。问题出在哪里?
【问题讨论】:
标签: c#
我有这个:
double result = 60 / 23;
在我的程序中,结果是 2,但正确的是 2,608695652173913。问题出在哪里?
【问题讨论】:
标签: c#
60 和 23 是整数文字,因此您进行整数除法,然后分配给双精度数。整数除法的结果是2。
试试
double result = 60.0 / 23.0;
或者等价
double result = 60d / 23d;
d 后缀告诉编译器你打算写一个双重文字。
【讨论】:
您可以使用以下任何一种都将给出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)。
【讨论】:
会有用的
double result = (double)60 / (double) 23;
或者等价
double result = (double)60 / 23;
【讨论】:
(双)60 / 23
【讨论】:
已经有一段时间没有使用 C#了,但是你正在将两个整数相除,据我所知,这使得结果也是一个整数。
你可以通过添加字母“d”来强制你的数字文字是双精度的,就像这样:
double result = 60d / 23d;
【讨论】:
双倍结果 = 60.0 / 23.0;
【讨论】:
最佳做法是正确装饰数字以使其适合其类型。这不仅避免了您遇到的错误,而且使代码更具可读性和可维护性。
double x = 100d;
single x = 100f;
decimal x = 100m;
【讨论】:
将被除数和除数转换为双精度值,结果是双精度
双分辨率 = 60d/23d;
【讨论】:
补充一下到目前为止所说的... 60/23 是对两个常量的操作。编译器将结果识别为常量并预先计算答案。由于运算是对两个整数进行的,所以编译器使用整数结果 60/23 的整数运算的结果为 2;因此编译器有效地创建了以下代码:
double result = 2;
正如已经指出的那样,您需要告诉编译器不要使用整数,将一个或两个操作数更改为非整数将使编译器使用浮点常量。
【讨论】: