文字列として表される2つの数値、「100」と「200」、「100.1」と「2000.1」がある場合、どちらが大きいかを比較するにはどうすればよいですか。
データ型を処理する汎用のNumber.Compare(stringA、stringB)はありますか?データベースエントリを使用して検証ルールを決定していますが、値がlong、decimal、floatなどである可能性があるため、単一のルールを作成することはできません。
文字列として表される2つの数値、「100」と「200」、「100.1」と「2000.1」がある場合、どちらが大きいかを比較するにはどうすればよいですか。
データ型を処理する汎用のNumber.Compare(stringA、stringB)はありますか?データベースエントリを使用して検証ルールを決定していますが、値がlong、decimal、floatなどである可能性があるため、単一のルールを作成することはできません。
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();
これは、タイプを宣言した場合にも機能します。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));
データ型を処理する汎用のNumber.Compare(stringA、stringB)はありますか?
いいえ、一般的な数値の比較はありません。番号の種類を知っておく必要があります。たとえば、浮動小数点数「100.1」の文字列を整数として解析することはできません。文字列を小数または倍精度浮動小数点数(「100」と「100.1」の両方を処理します)として解析し、結果を比較します。Math.Maxを使用して、2つの数値から大きくします。
var max = Math.Max(Double.Parse("100.1"), Double.Parse("200"));
文字列として表される数値は、doubleに変換できる必要があります。
それらを解析します。既存のパーサーを使用するか、手動で実行します。立ち上がってフォーマットがすべてである可能性があることを教えてくれるため、後でトリッキーになる可能性があります。これは科学的記数法である可能性があります。
int.tryParseを使用します。これにより、文字列が数値でない場合でも爆発しないようになります。