对于这个代码块:
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;
但是有没有其他方法可以得到正确的双重结果呢?我不喜欢使用原始类型,谁知道会发生什么。
当前回答
最好的办法是
int i = 3;
Double d = i * 1.0;
d is 3.0 now.
其他回答
类型转换是唯一的方法
也许你不会明确地这么做,但它会发生。
现在,有几种方法可以尝试获得精确的双精度值(其中num和denom是int类型,当然还有强制转换)
使用显式强制转换:
Double d = (Double) num / denom; Double d = ((Double) num) / denom; Double d = num / (Double) denom; Double d = (Double) num / (Double) denom;
但不是double d = (double) (num / denom);
使用隐式强制转换:
Double d = num * 1.0 / denom; Double d = num / 1d / denom; Double d = (num + 0.0) / denom; Double d = num;D /= denom;
d = num / denom * 1.0; d = 0.0 + (num / denom);
现在如果你问,哪个更好?明确吗?还是隐式?
好吧,我们不要直接回答。简单地记住——我们程序员不喜欢源代码中的惊喜或魔法。我们真的很讨厌复活节彩蛋。
另外,额外的操作肯定不会使您的代码更有效率。对吧?
铸造原语有什么问题?
如果你因为某种原因不想施法,你可以这样做
double d = num * 1.0 / denom;
最好的办法是
int i = 3;
Double d = i * 1.0;
d is 3.0 now.
就用这个。
int fxd=1;
double percent= (double)(fxd*40)/100;
如果你改变了一个变量的类型如果公式改变了,你必须记得再加入一个double,因为如果这个变量不再是计算的一部分,结果就会混乱。我习惯在计算中进行强制转换,并在它旁边添加注释。
double d = 5 / (double) 20; //cast to double, to do floating point calculations
请注意,强制转换结果不会做到这一点
double d = (double)(5 / 20); //produces 0.0