最近在弄这个,取N位上的数。
方法1:
将要取的数除以10的N次方,然后取小数部分乘以10取整就是第N位上的数。
代码如下
int modfdn1(double d, int digits)
{
double temp1, temp2;
temp1 = d / pow(10.0, digits); //除以10的N次方
temp1 = modf(temp1, &temp2); //取浮点数的小数部分和整数部分。返回值temp1 为小数部分,参数temp2为整数部分。
return int(temp1 * 10.0);
}
方法2:
将要取的数除以10的N次方和N-1次方,除以10的N次方的乘以10后左差。
代码如下:
int modfdn2(double d, int digits)
{
double tempdn1, tempdn2, tempd1, tempd2;
tempd1 = pow(10.0, digits - 1);
tempd2 = pow(10.0, digits);
tempd1 = d / tempd1;
tempd2 = d / tempd2;
modf(tempd1, &tempdn1);
modf(tempd2, &tempdn2);
tempdn2 *= 10.0;
return int(tempdn1 - tempdn2);
}
方法3:
将要取的数除以10的N-1次方后取整后取与10的余数即可。
int modfdn3(double d, int digits)
{
int tempint(int(d / pow(10.0, digits - 1)));
return (tempint % 10);
}
经过测试方法3性能最佳,方法1次之, 方法2最差。
从代码中也能看出来,从浮点数的计算次数就能看出来。
经过测试100000000
方法1:1392
方法2:2372
方法3:72
使用clock()获得开始和结束后取差值。