取浮点数或整数个位,百位...上的数

来源:互联网 发布:网络摄像头直接接电脑 编辑:程序博客网 时间:2024/06/06 03:30

最近在弄这个,取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()获得开始和结束后取差值。

0 0
原创粉丝点击