6

文字列として表される2つの数値、「100」と「200」、「100.1」と「2000.1」がある場合、どちらが大きいかを比較するにはどうすればよいですか。

データ型を処理する汎用のNumber.Compare(stringA、stringB)はありますか?データベースエントリを使用して検証ルールを決定していますが、値がlong、decimal、floatなどである可能性があるため、単一のルールを作成することはできません。

4

6 に答える 6

6

linqで簡単

var numbers = new string[] {  "100" ,"200", "100.1" , "200.1" };
double max = numbers.Max(n => double.Parse(n));

文字列操作だけの別のソリューション

int N = 100;
var max = numbers.Select(n => n.Split('.'))
                 .OrderByDescending(p => p[0].PadLeft(N,'0'))
                 .ThenByDescending(p => p.Length > 1 ? p[1].PadRight(N, '0') : "")
                 .Select(p => p.Length > 1 ? p[0] + "." + p[1] : p[0])
                 .First();
于 2013-01-22T21:56:31.573 に答える
3

これは、タイプを宣言した場合にも機能します。decimalこれは、これをnumbers do not have a decimal point持っているかのdecimal pointように機能します。

var strNumbers = new string[] 
{ 
   "100", 
   "200",
   "100.1", 
   "200.1" 
};
decimal maxVal = numbers.Max(m => decimal.Parse(m));
于 2013-01-22T22:04:39.580 に答える
2

データ型を処理する汎用のNumber.Compare(stringA、stringB)はありますか?

いいえ、一般的な数値の比較はありません。番号の種類を知っておく必要があります。たとえば、浮動小数点数「100.1」の文字列を整数として解析することはできません。文字列を小数または倍精度浮動小数点数(「100」と「100.1」の両方を処理します)として解析し、結果を比較します。Math.Maxを使用して、2つの数値から大きくします。

var max = Math.Max(Double.Parse("100.1"), Double.Parse("200"));
于 2013-01-22T21:55:56.197 に答える
0

文字列として表される数値は、doubleに変換できる必要があります。

于 2013-01-22T21:57:30.287 に答える
0

それらを解析します。既存のパーサーを使用するか、手動で実行します。立ち上がってフォーマットがすべてである可能性があることを教えてくれるため、後でトリッキーになる可能性があります。これは科学的記数法である可能性があります。

于 2013-01-22T21:57:33.143 に答える
-2

int.tryParseを使用します。これにより、文字列が数値でない場合でも爆発しないようになります。

于 2013-01-22T21:56:22.903 に答える