首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >精度为2的十进制数的RegEx

精度为2的十进制数的RegEx
EN

Stack Overflow用户
提问于 2015-02-22 05:01:45
回答 2查看 1.4K关注 0票数 1

我需要一个正则表达式,它只接受十进制数,到两个小数。我已经尝试过^\d{1,}(\.\d{2})?$',但我不希望它使用可选组,因为这将允许1通过。如果取出可选组,它将不允许1.00通过。

我的代码:

代码语言:javascript
复制
[double]$bookPrice = read-host "Enter book price "
if($bookPrice -notmatch '^\d{1,}(\.\d{2})?$'){
        [console]::beep(500,300)
        Write-Host "invalid"
}

有效:

代码语言:javascript
复制
1.00
1.12

无效:

代码语言:javascript
复制
1
1.000000

我认为唯一能解决这个问题的方法是将变量$bookPrice更改为string,但我不想浪费一行将其转换回double。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-22 07:54:05

我认为你问错了问题,因为一旦你投出双倍,你的判罚就永远不会在“1点”上起作用。

当您将字符串转换为[double]$bookPrice时,尾随零将消失。双位不存储无意义的数字。如果用户键入1.00$bookPrice变量仅为"1“,如果用户键入1.10,则仅为"1.1”--当您对double执行-match时(将双返回转换为string),冗余尾随零将不会出现。

当然,如果您所关心的只是数字的字符串表示形式,那么您可以指定像这个"{0:n2}" -f $bookPrice那样的输出格式,以保证始终有两位小数,而且只有两位小数.

票数 1
EN

Stack Overflow用户

发布于 2015-02-22 05:24:48

[\d]*?[.][\d]{2}(?=[\s\W])

编写时考虑了python,但请查看:https://regex101.com/r/lT8xD9/1,以了解正在发生的事情。我认为它应该做你想要的,但我在这方面也有点新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28654736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档