我正在尝试操纵一个字符串..
例如:
string DiagnosesString "250.00 03 350.0001 450.00 01 550.00 02";
输出
250.00
350.00
450.00
550.00
我尝试使用Split方法。正如您在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();
答案 0 :(得分:5)
var DiagnosisCodesParts =
DiagnosesString.Split(' ')
.Where(s => !s.StartsWith("0"))
.Select(s => Decimal.Parse(s))
.Select(d => d.ToString("0.00");
答案 1 :(得分:3)
如何做一个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");
}
}
答案 2 :(得分:2)
如果您正在处理数值,我建议将它们解析为实际的数字类型,例如使用Decimal.Parse
或Decimal.TryParse
。然后,您可以使用格式将其转换回字符串,例如myNumber.ToString("N2")
答案 3 :(得分:2)
您可以将它们解析为double。我喜欢使用XmlConvert
:
foreach (var s in diagnosisCodesParts)
{
var d = XmlConvert.ToDouble(s);
Console.WriteLine(string.Format({0:2}, d));
}
答案 4 :(得分:1)
尝试在空间上进行aplitting。
string DiagnosisCodestemp = DiagnosesString.Replace(" 01 ", " ").Replace(" 02 ", " ").Replace(" 03 ", " ").Replace(" 04 ", " ").Replace(" 05 ", " ").Replace(" 06 ", " ").Replace(" 07 ", " ");
string[] DiagnosisCodesParts = DiagnosisCodestemp.Split(' ');
这应生成一个包含值的数组,您可以根据需要进行筛选。然后,您可以将值转换为十进制并舍入为2位以删除额外值。
答案 5 :(得分:1)
您可以使用正则表达式匹配数字
/\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的数字...您应该提供更多数据来解析数据...
答案 6 :(得分:1)
1)将字符串转换为小数 2)将小数舍入到小数点后2位 3)将其转换回字符串
答案 7 :(得分:1)
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”,“”)。替换(“06”,“”)。替换(“07”,“”);
string[] DiagnosisCodesParts = DiagnosisCodestemp.Split();
foreach (var item in DiagnosisCodesParts)
{
string[] parts = item.Split('.');
string num = parts[1];
if (num.Length > 2)
{
num = num.Replace(num, "00");
}
}
答案 8 :(得分:1)
好的,我不确定我完全理解你的问题,但我会试试。
答案 9 :(得分:1)
您需要将字符串转换为数字值,我选择小数,因为它不会像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
}
}
答案 10 :(得分:1)
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();
}
}
}
答案 11 :(得分:1)
列表列表=新列表();
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);
}
o / p:250.00 350.00 450.00 550.00