对于这个代码块:
int num = 5;
int denom = 7;
double d = num / denom;
d值为0.0。它可以通过施法强制工作:
double d = ((double) num) / denom;
但是有没有其他方法可以得到正确的双重结果呢?我不喜欢使用原始类型,谁知道会发生什么。
对于这个代码块:
int num = 5;
int denom = 7;
double d = num / denom;
d值为0.0。它可以通过施法强制工作:
double d = ((double) num) / denom;
但是有没有其他方法可以得到正确的双重结果呢?我不喜欢使用原始类型,谁知道会发生什么。
当前回答
可以使用以下语句:
double step = 1d / 5;
(1d是双重施法)
其他回答
您可以考虑对操作进行包装。例如:
class Utils
{
public static double divide(int num, int denom) {
return ((double) num) / denom;
}
}
这允许您查询(只有一次)强制转换是否完全符合您的要求。此方法还可以进行测试,以确保它继续执行您想要的操作。使用什么技巧来引起除法也不重要(您可以使用这里的任何答案),只要它得到正确的结果。在需要对两个整数进行除法的任何地方,现在只需调用Utils::divide,并相信它做的是正确的事情。
将其中一个整数/两个整数强制转换为浮点数,以强制使用浮点数学完成操作。否则,整数数学总是首选。所以:
1. double d = (double)5 / 20;
2. double v = (double)5 / (double) 20;
3. double v = 5 / (double) 20;
请注意,强制转换结果不会做到这一点。因为第一次除法是按照优先级规则进行的。
double d = (double)(5 / 20); //produces 0.0
我不认为你所考虑的选角有任何问题。
如果你改变了一个变量的类型如果公式改变了,你必须记得再加入一个double,因为如果这个变量不再是计算的一部分,结果就会混乱。我习惯在计算中进行强制转换,并在它旁边添加注释。
double d = 5 / (double) 20; //cast to double, to do floating point calculations
请注意,强制转换结果不会做到这一点
double d = (double)(5 / 20); //produces 0.0
就用这个。
int fxd=1;
double percent= (double)(fxd*40)/100;
可以使用以下语句:
double step = 1d / 5;
(1d是双重施法)