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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值