C#简单划分问题

Sim*_*mon 14 c#

我有这个:

 double result = 60 / 23;
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*unt 51

60和23是整数文字,因此您进行整数除法然后分配给double.整数除法的结果是2.

尝试

double result = 60.0 / 23.0;
Run Code Online (Sandbox Code Playgroud)

或者等价

double result = 60d / 23d;
Run Code Online (Sandbox Code Playgroud)

d后缀通知编译器你打算写一个双字面.

  • 我认为这应该标记为答案,因为标记为答案的explenation复制了这个.. (4认同)

Jav*_*ram 18

你可以使用以下任何一个都给2.60869565217391:

 double result = 60 / 23d;  
 double result = 60d / 23;  
 double result = 60d/ 23d;  
 double result = 60.0 / 23.0;   
Run Code Online (Sandbox Code Playgroud)

double result = 60 / 23;  //give 2
Run Code Online (Sandbox Code Playgroud)

说明:

如果任何一个数字是双倍,它将给出一倍


编辑:

文档

表达式的评估根据以下规则执行:

  • 如果其中一个浮点类型为double,则表达式求值为double(或者在关系或布尔表达式的情况下为bool).

  • 如果表达式中没有double类型,则计算为float(或者在关系表达式或布尔表达式的情况下为bool).


Nul*_*ter 9

它会工作

double result = (double)60 / (double) 23;
Run Code Online (Sandbox Code Playgroud)

或者等价

double result = (double)60 /  23;
Run Code Online (Sandbox Code Playgroud)

  • 尽管编译器可以适当地优化它,但是这段代码会产生行为:取整数60,然后将其转换为double.取整数23,然后将其转换为double.划分两个演员的结果.最好先使用双值(如James Gaunt的答案) (4认同)
  • 这样你真的希望编译器能够优化演员.正如它所写的那样,它只是通过执行运行时类型转换来引入额外的工作.它有效 - 但它有点难看. (2认同)