要返回一个double,即使c#中的类型是double,我是否必须转换为double?

yog*_*urt 7 c# casting

要返回一个double,即使类型是double,我是否必须转换为double?

例如

double a = 32.34;
double b = 234.24;

double result = a - b + 1/12 + 3/12;
Run Code Online (Sandbox Code Playgroud)

我必须投(双)?

Jon*_*eet 19

不,你没有.但是,你的表达几乎肯定不会达到你想要的效果.

表达式1/12和3/12将使用整数运算来执行.

你可能想要:

double result = a - b + 1/12d + 3/12d;
Run Code Online (Sandbox Code Playgroud)

要么

double result = a - b + 1/(double) 12 + 3/(double) 12;
Run Code Online (Sandbox Code Playgroud)

这两个都将强制使用浮点运算执行除法.

这里的问题是,如果算术运算符的两个操作数都是整数,那么操作是使用整数运算执行的,即使它是类型的更大表达式的一部分double.在这里,你的表达是有效的:

double result = a - b + (1 / 12) + (3 / 12);
Run Code Online (Sandbox Code Playgroud)

加法和减法是可以的,因为它们的类型ab强制它们使用浮点运算来执行 - 但是因为除"加法和减法"之间的"绑定"更紧密(即,就像使用上面的括号一样),只考虑立即操作数.

那有意义吗?

编辑:由于它如此受欢迎,在这里包含devinb的评论也是有道理的:

double result = a - b + 1.0/12.0 + 3.0/12.0;
Run Code Online (Sandbox Code Playgroud)

就编译器而言,这是完全相同的 - 你只需要决定哪个更清楚:

(double) 1
1.0
1d
Run Code Online (Sandbox Code Playgroud)

  • 另外,我相信1.0/12.0 + 3.0/12.0会做到这一点,而不需要施法.虽然,建议Jon Skeet错过了什么让我担心...... (4认同)