我将在这里使用Java作为示例,因为它可能完全取决于语言,但我通常对如何做到这一点感兴趣。
当然,最简单明了的方法就是:
Math.pow(10, x)
但据我所知,电力是一项相当昂贵的操作。因此我认为应该有更好的方法,因为它看起来很明显 - 我只需要在1之后的x零!
修改 是的,这可能是过早的优化。上下文是对小数点后n位的舍入操作,通常使用如下内容:
private final static int[] powersOf10 = {1, 10, 100, 1000, 10000};
public static double round(double number, int decimals) {
if(decimals < 5)
return Math.rint(number / powersOf10[decimals]) * powersOf10[decimals];
double c = Math.pow(10, decimals);
return Math.rint(number * c) / c;
}
这是我使用的当前舍入函数,你可以看到我已经使用了一个查找表来查找最常用的值,但我仍然很好奇是否有一些魔法或类似的东西来改善这一点。
答案 0 :(得分:11)
最快的方法是
static final int[] POWERS_OF_10 = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
static int powerOfTen(int pow) {
return POWERS_OF_10[pow];
}
...因为没有更高的10的幂适合int
。对不起,如果你期待更酷的东西。
答案 1 :(得分:0)
这是我的解决方案:
template <typename T, enable_if_t<is_same_v<T, int>, int> = 0>
void qw(T t)
{
std::cout << "int " << endl;
}
template <typename T, enable_if_t<is_same_v<T, float>, int> = 0>
void qw(T t)
{
cout << "float" << endl;
}
对此我感到很高兴,三天前我开始学习Java,现在我很喜欢它!