int a{5},b{2},c{9};
double d = (double)a / (double)b + (double)c;
或者我可以使用 static_cast
。无论哪种方式都是冗长的,尤其是当公式很长时。有更好的解决方案吗?
最佳答案
你可以乘以 1.0:
int a{5}, b{2}, c{9};
double d = 1.0 * a / b + 1.0 * c;
当你处理总和时,你可以加到 0.0:
double d = 0.0 + a - b + c;
大多数编译器会执行优化,以便不评估无意义的操作。仅完成类型转换。
请记住,您只需转换每个除法/乘法组中的第一个成员。以任何看似合理的方式这样做。简单的加法/减法(没有其他类型的乘数/除数)也被转换。编译器保证类型转换。所以你的例子:
double d = (double)a / (double)b + (double)c;
真的可以改写成这样:
double d = (double)a / b + c;
double d = 1.0 * a / b + c;
double d = static_cast<double>(a) / b + c;
更多例子:
double d = (double)a / b + (double)c / d + e;
double d = 1.0 * a / b + 1.0 * c / d + e;
double d = static_cast<double>(a) / b + static_cast<double>(c) / d + e;
关于c++ - 如何将整数隐式转换为 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37777053/