我有一個像這樣的數字字符串2223,00
。我想將其轉換爲2223
。這是:沒有後「,」。假設在「,」之後將只有兩位小數。從C#中的字符串中刪除最後一個字符。一個優雅的方式?
我所做的:
str = str.Remove(str.Length - 3, 3);
是否有一個更優雅的解決方案?也許使用其他功能? -I鴕鳥政策喜歡把明確numbers-
我有一個像這樣的數字字符串2223,00
。我想將其轉換爲2223
。這是:沒有後「,」。假設在「,」之後將只有兩位小數。從C#中的字符串中刪除最後一個字符。一個優雅的方式?
我所做的:
str = str.Remove(str.Length - 3, 3);
是否有一個更優雅的解決方案?也許使用其他功能? -I鴕鳥政策喜歡把明確numbers-
實際上,你可以只使用Remove重載需要一個參數:
str = str.Remove(str.Length - 3);
但是,如果你想避免硬編碼的長度,你可以使用:
str = str.Remove(str.IndexOf(','));
String.Format("{0:0}", 123.4567); // "123"
如果您的初始值是十進制轉換爲字符串,你將需要轉換
String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture)) //3.5
在這個例子中,我選擇不變的文化,但你可以使用你想要的。
我更喜歡使用格式化函數,因爲您不知道未來是否小數可能包含2或3前導數字。
編輯:您還可以使用Truncate
刪除所有後面的或。
Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5")));
這將返回到您的逗號
str = str.Substring(0, str.IndexOf(','));
當然後排除一切字符串,這假設您的字符串實際上有一個逗號小數點。如果沒有,上面的代碼將會失敗。你想要做更多的檢查:
commaPos = str.IndexOf(',');
if(commaPos != -1)
str = str.Substring(0, commaPos)
我假設你正在使用一個字符串開始。理想情況下,如果你有一些工作開始說起,就像一個浮動或雙,你可以只將其轉換爲int
,然後做myInt.ToString()
,如:
myInt = (int)double.Parse(myString)
這解析雙重使用當前區域性(這裏在美國,我們使用.
作爲小數點)。但是,這又假定您的輸入字符串可以被解析。
使用lastIndexOf。像:
string var = var.lastIndexOf(',');
用途:
public static class StringExtensions
{
/// <summary>
/// Cut End. "12".SubstringFromEnd(1) -> "1"
/// </summary>
public static string SubstringFromEnd(this string value, int startindex)
{
if (string.IsNullOrEmpty(value)) return value;
return value.Substring(0, value.Length - startindex);
}
}
我更喜歡這裏的擴展方法有兩個原因:
Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
請嘗試以下操作。它的工作對我來說:
str = str.Split(',').Last();
你可以使用LastIndexOf和子字符串相結合,讓所有字符的刺痛中逗號的最後一個索引的左側。
string var = var.Substring(0,var.LastIndexOf(','));
我收到了很多很好的答案。但就雅緻而言,這是我將要使用的一個。儘管如此,我不知道哪一個更有效率。所以,讓你的選擇! – Kani
第二種解決方案更易於閱讀,理解和維護,並且**低水平**性能方面的差異非常微不足道。 如果你知道'''總是在-3位置,那麼第一個解決方案仍然可以,但是*過早優化*是浪費你的時間的可怕的事情。 –
@Kani首先是最高效的 - 但我完全同意斯科特。我總是會選擇第二個,除非我在分析後知道有一個表演。瓶頸在這裏。這些(以及大多數其他答案)都將非常快 - 幾乎適用於所有目的。 –