如果要返回一个double,即使类型是double,我是否需要转换为double?
例如:
double a = 32.34;
double b = 234.24;
double result = a - b + 1/12 + 3/12;
我需要将(double)强制类型转换吗?
不需要,但是你的表达式几乎肯定不能实现你想要的功能。
表达式 1/12 和 3/12 将使用 整数 算术运算。
你可能想要这样做:
double result = a - b + 1/12d + 3/12d;
或者
double result = a - b + 1/(double) 12 + 3/(double) 12;
这两种方法都会强制使用浮点数算术进行除法运算。
问题在于,如果算术运算符的两个操作数都是整数,则使用整数算术执行该操作,即使它是更大表达式的一部分,该表达式是double
类型。在这里,您的表达式实际上是:
double result = a - b + (1 / 12) + (3 / 12);
加法和减法没问题,因为 a
和 b
的类型强制使用浮点运算进行计算 - 但是由于除法“绑定得更紧密”(即它类似于上面使用括号),比起加法和减法,只考虑了直接的操作数。
这讲得通吗?
编辑:由于它非常受欢迎,因此包含devinb的评论也是有意义的:
double result = a - b + 1.0/12.0 + 3.0/12.0;
对于编译器来说,它们都是一样的东西-你只需要决定哪个更清晰易懂:
(double) 1
1.0
1d
嗯 - 我处理整数除法问题的方式是这样的:
double result = a - b + 1/12.0 + 3/12.0
当然,没有强制类型转换也可以做到这一点:
double result = a - b + 1.0/12 + 3.0/12;
这取决于您所询问的铸造内容。以下是两种不同情况:
double a = 32.34;
double b = 234.24;
double result1 = a - b + 1/12 + 3/12;
double result2 = a - b + (double)1/12 + (double)3/12;
Console.WriteLine(result1); // Result: -201.9
Console.WriteLine(result2); // Result: -201.566666666667
类型转换用于指示您何时想要将一种数据类型更改为另一种类型。这是因为更改 类型
通常涉及可能丢失数据的情况。
例如:
double a = 8.49374;
//casting is needed because the datatypes are different.
// a_int will end up with the value is 8, because the precision is lost.
int a_int = (int) a;
double b = (double) a_int;
在进行数学计算时,C#会将结果返回为具有较大类型的参数类型。
据我回忆,顺序大致如下(从大到小):
当然,这里跳过了每个类型的无符号版本。