私はこのような数値文字列を持っています2223,00
。に変換したいと思い2223
ます。これは、「、」の後に情報がない場合です。「、」の後に小数点以下2桁しかないと仮定します。
やった:
str = str.Remove(str.Length - 3, 3);
よりエレガントな解決策はありますか?たぶん別の機能を使用していますか?-明示的な数字を入れるのは好きではありません-
回答:
実際には、次の1つのパラメーターを取るRemoveオーバーロードを使用できます。
str = str.Remove(str.Length - 3);
ただし、長さのハードコーディングを回避しようとしている場合は、次を使用できます。
str = str.Remove(str.IndexOf(','));
,
が常に位置-3にあることを知っている場合、最初の解決策はまだ問題ありませんが、時期尚早の最適化は時間を無駄にするひどいことです。
おそらくこれ:
str = str.Split(",").First();
2
toの2番目の引数を渡すことを検討してくださいSplit
。
これにより、カンマの後のすべてを除く文字列が返されます
str = str.Substring(0, str.IndexOf(','));
もちろん、これは文字列に実際に小数のコンマがあることを前提としています。そうでない場合、上記のコードは失敗します。さらにチェックを行いたいと思うでしょう:
commaPos = str.IndexOf(',');
if(commaPos != -1)
str = str.Substring(0, commaPos)
そもそも文字列を使っていると思います。理想的には、floatやdoubleのように、最初から数値を操作している場合は、それをにキャストしてint
、次のmyInt.ToString()
ようにすることができます。
myInt = (int)double.Parse(myString)
これは、現在のカルチャを使用してdoubleを解析します(ここ米国では.
、小数点に使用します)。ただし、これも入力文字列が解析できることを前提としています。
String.Format("{0:0}", 123.4567); // "123"
初期値が10進数から文字列の場合は、変換する必要があります
String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture)) //3.5
この例では、不変のカルチャを選択しますが、必要なカルチャを使用できます。
将来、小数に2または3の先行数値が含まれる可能性があるかどうかわからないため、フォーマット機能を使用することをお勧めします。
編集:、、、Truncate
またはの後のすべてを削除するために使用することもできます。
Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5")));
使用する:
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);
}
}
私は2つの理由でここで拡張メソッドを好みます:
Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
を使用できますTrimEnd
。それも効率的で、きれいに見えます。
"Name,".TrimEnd(',');
"123,45".TrimEnd(',')
を返します。
Remove last characters from a string if this character is...
私にぴったりです。感謝。"oppa/ ".Trim().TrimEnd('/');
lastIndexOfを使用します。お気に入り:
string var = var.lastIndexOf(',');