免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10749 | 回复: 6
打印 上一主题 下一主题

正则表达式把浮点数转换成百分数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-11 11:28 |只看该作者 |倒序浏览
现在想用正则表达式把浮点数转换成百分数。在网上搜到一篇资料。思想是看懂了;可是自己用正则表达式切写不出来。
我的问题点是如何能取出他所捕获的组?谢了。
文章如下:http://www.cnblogs.com/begincsdn/archive/2005/07/13/192049.html

将0.23234替换成23%,用正则表达式如何处理的问题。

这个问题解决起来其实也很简单,问题在于:
1. 要零去掉,如果是0.212就当转换成21%而不能转换成021%,对于其它数字,如
   1.212则要转换成121%,即第一位数字可能要除掉,也可能不除掉。
   结论是:只有当数字前面除零外,无其它数字时才要将零去除。
2. 要将小数点去掉。

所以,将这个字符串分成五个部分来看待,
1.  可以以零打头的字符串的零串,如'00.212',则将'00'要分成一组,而'001.212',仍然要将'00'分成一组.
2. 要将小数点前,已经去掉零串部分的分成一组,组名称为<header>
3. 要将小数点为成一组<dot>
4. 要将小数点后指定位数内的小数串分成一组<rear>
5. 要将小数点后指定位数外的小数串分成一组。
组已经区分完成。
很容易得出,我们要捕获的组是header和rear
(0*(?<header>\d*)(?<dot>\.)(?<rear>\d{0,2}))\d*

这样替换的语句就写成
${header}${rear}%

论坛徽章:
0
2 [报告]
发表于 2007-08-11 12:00 |只看该作者
不考虑四舍五入,0.219就被你搞成21%了。

论坛徽章:
0
3 [报告]
发表于 2007-08-11 12:11 |只看该作者
TO:LS
这个暂不考虑;先把正则表达式搞定了。

论坛徽章:
0
4 [报告]
发表于 2007-08-11 12:28 |只看该作者
原帖由 David.Jiang 于 2007-8-11 11:28 发表
现在想用正则表达式把浮点数转换成百分数……http://www.cnblogs. ...

你是非得用正则表达式呢,还是想完成转换的任务?

论坛徽章:
0
5 [报告]
发表于 2007-08-11 13:16 |只看该作者
不只是完成任务。想学学正则表达式;

论坛徽章:
0
6 [报告]
发表于 2007-08-11 13:48 |只看该作者
原帖由 David.Jiang 于 2007-8-11 13:16 发表
不只是完成任务。想学学正则表达式;

想学正则,看书做题就不错……
解决这个转换的问题,我不会用RegExp的:
sub flt_to_pct {
    sprintf( "%.2f", shift ) * 100 . '%';
}
print flt_to_pct(0.23834);

供参考。

论坛徽章:
0
7 [报告]
发表于 2007-08-11 15:10 |只看该作者
原帖由 royalzhang 于 2007-8-11 13:48 发表

想学正则,看书做题就不错……
解决这个转换的问题,我不会用RegExp的:
sub flt_to_pct {
    sprintf( "%.2f", shift ) * 100 . '%';
}
print flt_to_pct(0.23834);
供参考。

谢了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP