为了返回一个双精度值,即使类型是双精度的,我也必须强制转换为双精度吗?
例如:
double a = 32.34;
double b = 234.24;
double result = a - b + 1/12 + 3/12;我必须投(替身)吗?
发布于 2009-05-19 19:51:31
不,你不需要。但是,你的表达式几乎肯定不会达到你想要的效果。
将使用整数运算来执行表达式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发布于 2009-05-19 19:49:41
不,不需要铸造。
发布于 2009-05-19 19:56:18
嗯-我解决整数除法问题的方法是这样做的:
double result = a - b + 1/12.0 + 3/12.0不过,除了这些之外,不需要任何演员。
https://stackoverflow.com/questions/884686
复制相似问题