C#简单划分问题

时间:2010-11-12 08:39:08

标签: c#

我有这个:

 double result = 60 / 23;

在我的程序中,结果为2,但正确的是2,608695652173913。哪里有问题?

9 个答案:

答案 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;

正如已经指出的那样,你需要告诉编译器不要使用整数,将一个或两个操作数更改为非整数将使编译器使用浮点常量。