声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2241|回复: 6

[C/C++] 如何截取一个小数的第3到5位?

[复制链接]
发表于 2007-4-24 09:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

使用道具 举报

发表于 2007-4-24 12:57 | 显示全部楼层
是否可以先将小数转换成字符串,然后以字符串的形式进行截取?

评分

1

查看全部评分

发表于 2007-4-24 16:44 | 显示全部楼层
0.123456789*100000=12345.6789
取整后为12345,除以10余数即为5
同样方法*10000,1000分别可得到4,3
这样3,4,5就全部获得了
编个函数可以实现

评分

1

查看全部评分

发表于 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 编辑 ]
 楼主| 发表于 2007-4-25 09:02 | 显示全部楼层
因为我的算法中要用到十几位,我将double改为float,取x=0.1234567890123456789
用上面的函数,代码和运行结果如图所示,为什么会出错呢?

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

运行结果

运行结果

代码

代码
发表于 2007-4-25 10:52 | 显示全部楼层
float是单精度,只能提供7位有效数字,所以你上面的程序从第8位开始就不对了

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

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

评分

1

查看全部评分

 楼主| 发表于 2007-4-25 11:34 | 显示全部楼层
谢谢hao1982 !
非常感谢!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-24 21:25 , Processed in 0.067549 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表