首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >得到最大十进制数

得到最大十进制数
EN

Stack Overflow用户
提问于 2021-06-26 06:27:51
回答 3查看 105关注 0票数 0

我有个判断力

代码语言:javascript
复制
Regex.Match(result, @"\b(?<=Pay Rate)(\D*)(\d+(?:\.\d+)?)");

这个很好,但是只有在只有一个速率的情况下才能工作。它只抓住了第一个,这是很好的,因为当工资率只有一个比率,这是完美的工作。然而,有一种可能性,工资率可以有多个费率。例如,

工资率: 12.12%,13.13%,14.14%,15.15% (我不知道,它可以持续不断)。所以当有超过1的比率时,我只想得到最高的比率(总是小数点2位)。当只有一个的时候,把第一个打印出来。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-26 06:47:24

可以通过使用lambda表达式来实现。

代码语言:javascript
复制
var payRate = "12.12% 13.13% 14.14% 15.15% 10.10%";
var splitPayRate = payRate.Split(new char[] {' '});

var maxPayRate = splitPayRate.Select(x => Convert.ToDecimal(x.Replace("%",""))).ToList().OrderByDescending(x=>x).Take(1).FirstOrDefault();
票数 1
EN

Stack Overflow用户

发布于 2021-06-26 06:43:39

您可以为此使用重复捕获组,解析在每个组捕获中找到的数字,然后获得最大捕获率。因为我们将使用一个捕获组,我会放弃查找。像这样的事情应该有效:

代码语言:javascript
复制
string input = "Pay Rate: 12.12% 13.13% 14.14% 15.15%";
var match = Regex.Match(input, @"\bPay Rate:(?:\s*(\d+(?:\.\d+)?)%)+");
if (match.Success)
{
    var rate = match.Groups[1]
        .Captures.OfType<Capture>()
        .Select(c => decimal.Parse(c.Value))
        .Max();
    Console.WriteLine(rate); // 15.15
}

如果您确定最大值始终是最后一个,您可以简单地使用:

代码语言:javascript
复制
Regex.Match(input, @"\bPay Rate:(?:\s*(\d+(?:\.\d+)?)%)+").Groups[1].Value
票数 1
EN

Stack Overflow用户

发布于 2021-06-26 06:52:35

您可以使用Linq的Max()

代码语言:javascript
复制
var input = "12.12% 13.13% 14.14% 15.15% 10.10%";
var result =  input.Replace("%","") //Remove all % from input string in one go
                .Split(" ") //Split by space
                .Select(decimal.Parse) //Convert IEnumerable of string to IEnumerable of float
                .Max(); //Get Max element from given list

.net小提琴

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

https://stackoverflow.com/questions/68139831

复制
相关文章

相似问题

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