C# 从字符串中提取数字
我在试着操纵一个字符串 例如:C# 从字符串中提取数字,c#,.net,string,split,C#,.net,String,Split,我在试着操纵一个字符串 例如: string DiagnosesString "250.00 03 350.0001 450.00 01 550.00 02"; 输出 250.00 350.00 450.00 550.00 我试着使用拆分方法。正如您在350.0001中的示例中所看到的,其输出为350.00 我可以删除03、02等 问题: 1.)如何删除350.0001的o1仅获取350.00 这是我的密码: string DiagnosisCodestemp = DiagnosesStr
string DiagnosesString "250.00 03 350.0001 450.00 01 550.00 02";
输出
250.00
350.00
450.00
550.00
我试着使用拆分方法。正如您在350.0001中的示例中所看到的,其输出为350.00
我可以删除03、02等
问题:
1.)如何删除350.0001的o1仅获取350.00
这是我的密码:
string DiagnosisCodestemp = DiagnosesString.Replace(" 01 ", " ").Replace(" 02 ", " ").Replace(" 03 ", " ").Replace(" 04 ", " ").Replace(" 05 ", " ").Replace(" 06 ", " ").Replace(" 07 ", " ");
string[] DiagnosisCodesParts = DiagnosisCodestemp.Split();
做一个Decimal.TryParse并格式化十进制数字怎么样。这也将清除坏值
string DiagnosesString = "250.00 03 350.0001 450.00 01 550.00 02";
var diagnoses = DiagnosesString.Split(' ');
foreach(var diagnosis in diagnoses)
{
decimal temp;
if(diagnosis.Contains(".") && Decimal.TryParse(diagnosis, out temp))
{
// do something
var value = temp.ToString("0.00");
}
}
试着适应这个空间
string DiagnosisCodestemp = DiagnosesString.Replace(" 01 ", " ").Replace(" 02 ", " ").Replace(" 03 ", " ").Replace(" 04 ", " ").Replace(" 05 ", " ").Replace(" 06 ", " ").Replace(" 07 ", " ");
string[] DiagnosisCodesParts = DiagnosisCodestemp.Split(' ');
这将生成一个包含值的数组,您可以筛选所需的值。然后,您可以将值转换为十进制,并将其四舍五入为2位,以删除多余的值。您可以使用正则表达式匹配数字
/\d+\.\d+/
但这取决于你能否更准确地定义你的数字
decimal number;
string DiagnosesString = "250.00 03 350.0001 450.00 01 550.00 02";
foreach(var num in Regex.Matches(DiagnosesString, @"\d+\.\d+"))
{
Decimal.TryParse(num.ToString(), out number);
Console.WriteLine(number.ToString("0.00"));
}
可能您甚至需要这样的正则表达式:
/(\d+.\d\d)\d*/
要仅匹配格式为0.00的数字。。。您应该提供更多数据,以了解如何解析数据。1)将字符串转换为十进制
var DiagnosisCodesParts =
DiagnosesString.Split(' ')
.Where(s => !s.StartsWith("0"))
.Select(s => Decimal.Parse(s))
.Select(d => d.ToString("0.00");
2) 将小数点四舍五入至小数点后2位
3) 将其转换回字符串如果您处理的是数值,我建议将它们解析为实际的数值类型,例如使用
Decimal.Parse
或Decimal.TryParse
。然后,您可以使用格式将其转换回字符串,例如,myNumber.ToString(“N2”)
您可以将其解析为双精度字符串。我喜欢为此使用XmlConvert
:
foreach (var s in diagnosisCodesParts)
{
var d = XmlConvert.ToDouble(s);
Console.WriteLine(string.Format({0:2}, d));
}
字符串诊断字符串=“250.00 03 350.0001 450.00 01 550.00 02” string diagnosisdestemp=diagnosisstring.Replace(“01”和“)。Replace(“02”和“)。Replace(“03”和“)。Replace(“04”和“)。Replace(“05”和“)。Replace(“06”和“)。Replace(“07”和“)
好的,我不确定我是否完全理解你的问题,但我会试试看
您需要将字符串转换为数值,我选择decimal,因为它不会像double或float那样丢失精度。然后可以使用格式字符串说明符将其转换为所需的十进制格式:
var list = List<string>();
foreach(var s in splitString) {
// code to rule out 02, 01, etc. goes here
decimal tmp;
if (decimal.TryParse(s, out tmp)) {
var code = tmp.ToString("0.00");
list.Add(code);
} else {
// something went wrong, handle it here
}
}
var list=list();
foreach(splitString中的变量s){
//排除02、01等的代码在这里
十进制tmp;
if(十进制锥巴色,输出tmp)){
var代码=tmp.ToString(“0.00”);
列表。添加(代码);
}否则{
//出了点问题,在这里处理
}
}
列表=新列表()
o/p:250.00 350.00 450.00 550.00您确实需要更具体地说明输入可能是什么,您给出的示例并不能告诉我们太多。您能否提供输入字符串格式的更多详细信息?例如,输入字符串是否始终是5位小数(xxx.xx)后跟2位数字(yy)?还有,“350.0001”对的350.00和01之间没有空间-这可能会让生活变得艰难!很简单,350.0001-0.0001=350.00:PBecause XML定义了如何序列化双精度。每当我试图解析double时,我都会感到头疼,因为您需要正确设置NumberFormatProvider,否则可能会发生不好的事情。看到输入中的那个句号了吗?那是千位分隔符还是小数点?但是是的,您也可以为
double.Parse
指定正确的格式选项。有趣的是,我不知道这一点+1:)如何删除不良条目03将通过十进制正确解析。解析?只需注意:您可以使用Split(“”)
或Split(“”,“;”,:”)
-不需要创建新数组。如果输入有数字250.01?你的代码给出的结果是250.00,对吗?我没有检查tht条件,如果输入代码是250.01,它仍然给出01而不是00。如果你有另一个条件,比如输入字符串是250.01,那么你需要写另一个条件,如果你希望o/p为250.00,你是最受欢迎的。感谢您接受我的回答。如果任何项目不包含。如果任何项目不包含“”,则将引发异常。您的意思是“ok”,那么我们可以编写条件,我们可以检查是否(项目。包含(“.”),然后它将进入循环,或者在其他部分我们可以编写列表。添加(项目)@SilverFang:那么你应该在你的问题中指定这种可能性。对不起,如果没有一个精确的问题陈述,我们无法精确地解决你的问题。也许只检查一个小数点就可以输入,而不是一个以开始?这与匹配值有点不匹配。是不是有点不匹配,很抱歉混乱…已经清理了一个nd测试。
var list = List<string>();
foreach(var s in splitString) {
// code to rule out 02, 01, etc. goes here
decimal tmp;
if (decimal.TryParse(s, out tmp)) {
var code = tmp.ToString("0.00");
list.Add(code);
} else {
// something went wrong, handle it here
}
}
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = "250.00 03 350.0001 450.00 01 550.00 02";
Match match = Regex.Match(input, @"[0-9]+[/.][0-9]+", RegexOptions.IgnoreCase);
while (match.Success)
{
string key = match.Value;
Console.WriteLine(String.Format("{0:0.00}", Convert.ToDecimal(key, new CultureInfo("en-US"))));
match = match.NextMatch();
}
}
}
string DiagnosesString = "250.00 03 350.0001 450.00 01 550.00 02";
string DiagnosisCodestemp = DiagnosesString.Replace(" 01 ", " ").Replace(" 02 ", " ").Replace(" 03 ", " ").Replace(" 04 ", " ").Replace(" 05 ", " ").Replace(" 06 ", " ").Replace(" 07 ", " ");
string[] DiagnosisCodesParts = DiagnosisCodestemp.Split();
foreach (var item in DiagnosisCodesParts)
{
string[] parts = item.Split('.');
string num = parts[1];
string finalValue = string.Empty;
if (num.Length > 2)
{
num = num.Replace(num, "00");
finalValue = parts[0]+"."+num;
}
else
{
finalValue = parts[0] + "." + num;
}
list.Add(finalValue);
}