簡體   English   中英

從字符串中提取數字

[英]Extracting Numbers From A String

我正試圖操縱一個字符串..

例如:

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();
var DiagnosisCodesParts =
    DiagnosesString.Split(' ')
                   .Where(s => !s.StartsWith("0"))
                   .Select(s => Decimal.Parse(s))
                   .Select(d => d.ToString("0.00");

如何做一個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");
  }
}

如果您正在處理數值,我建議將它們解析為實際的數字類型,例如使用Decimal.ParseDecimal.TryParse 然后,您可以使用格式將其轉換回字符串,例如myNumber.ToString("N2")

您可以將它們解析為double。 我喜歡使用XmlConvert

foreach (var s in diagnosisCodesParts)
{
    var d = XmlConvert.ToDouble(s);
    Console.WriteLine(string.Format({0:2}, d));
}

嘗試在空間上進行調整。

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)將字符串轉換為小數2)將小數點數舍入為2位小數3)將其轉換回字符串

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");
            }

        }

好吧,我不確定我完全理解你的問題,但我會試試。

  1. 你像以前一樣分開了。
  2. 您過濾/忽略長度為2或更小的所有字符串。
  3. 您將數組中剩余的字符串轉換為double。
  4. 在點之后將這些值四舍五入為2。

你需要將字符串轉換為數值,我選擇十進制,因為它不會丟失精度,如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
  }
}
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();
        }
    }
}

List list = new List();

       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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM