xsj3917 发表于 2007-4-24 09:59

如何截取一个小数的第3到5位?

各位大侠:
      在C/C++里面,如何截取一个小数的小数点后的第3到5位?
      如0.123456789, 如何取出345?
      谢谢!

xinyuxf 发表于 2007-4-24 12:57

是否可以先将小数转换成字符串,然后以字符串的形式进行截取?

hao1982 发表于 2007-4-24 16:44

0.123456789*100000=12345.6789
取整后为12345,除以10余数即为5
同样方法*10000,1000分别可得到4,3
这样3,4,5就全部获得了
编个函数可以实现

hao1982 发表于 2007-4-24 20:07

C++程序帮你编好了:

//取小数s的小数点后第n个数字,作为函数值返回;inline表示内联函数,这样速度快些
inline int GetOut(double s,int n)
{
      for(int i=1;i<=n;i++)
                s*=10;
      return int(s)%10;
}

[ 本帖最后由 hao1982 于 2007-4-24 20:08 编辑 ]

xsj3917 发表于 2007-4-25 09:02

因为我的算法中要用到十几位,我将double改为float,取x=0.1234567890123456789
用上面的函数,代码和运行结果如图所示,为什么会出错呢?

[ 本帖最后由 xsj3917 于 2007-4-25 09:20 编辑 ]

hao1982 发表于 2007-4-25 10:52

float是单精度,只能提供7位有效数字,所以你上面的程序从第8位开始就不对了

如果你要取到7位以上,那需要把类型设为双精度double型,它能提供15位有效数字

注意,有效数字也包含你小数点前的位数

xsj3917 发表于 2007-4-25 11:34

谢谢hao1982 !
非常感谢!
页: [1]
查看完整版本: 如何截取一个小数的第3到5位?