none
カスタムIsNumeric関数 RRS feed

  • 質問

  •  

    はじめまして、全般的に 未熟な 未熟者です。

     

    IsNumeri関数を カスタマイズしようと思っています。

    ここで質問です。

    パラメータがString型の場合 そのパラメータの内容が、"1,000"だった場合

    一般的に 数値チェックで 数値ではないと 判断されるのが正しいのでしょうか?

     

    私自身としては 数値として判断されるのが正しいと思うのですが、いかがでしょうか?

     

    よろしくお願いいたします。

    2008年6月14日 1:09

回答

  • 未熟者さん、こんにちは

    ダッチです。

     

     未熟者 さんからの引用
    パラメータがString型の場合 そのパラメータの内容が、"1,000"だった場合

    一般的に 数値チェックで 数値ではないと 判断されるのが正しいのでしょうか?

    どちらも正しいといえると思います。

    どのように振舞うかは、そのアプリケーションで決めていいと思います。カンマ区切りを数値として判断できるということは、それだけユーザの入力に対して寛容であるということです。ユーザからすると、そのほうが親切に思うことが多いと思います。

     

    ライブラリとして汎用的な振る舞いをしたいのであれば、どちらの振る舞いも出来るようにするといいのではないでしょうか。例えば Int32.TryParse メソッド では NumberStyles 列挙体を受け取ることができ、その値によってカンマ区切りを数値とするか、しないかなど細かく設定することができます。

    2008年6月14日 1:29
  •  未熟者 さんからの引用

    パラメータがString型の場合 そのパラメータの内容が、"1,000"だった場合

    一般的に 数値チェックで 数値ではないと 判断されるのが正しいのでしょうか?

    私自身としては 数値として判断されるのが正しいと思うのですが、いかがでしょうか?

     
    すでに書かれているようなスタイルの違いのほかに、カルチャや環境設定も確認したほうがよいと思います。
     
    一部のカルチャや環境では、整数部と小数部の区切り記号として "," が採用されていることがあり、
    そのような環境では、桁区切りがない状態でも 1 という数値として正しい表記になります。
     
    2008年6月14日 8:15
  •  K.Takaoka さんからの引用
    一部のカルチャや環境では、整数部と小数部の区切り記号として "," が採用されていることがあり、
    そのような環境では、桁区切りがない状態でも 1 という数値として正しい表記になります。
    地域と言語のオプションの「標準と形式」(XP)をドイツ語あたりにすると目に見えますね。
     
    次のコードで日本語とドイツ語の出力内容を見ると良いかもしれない。
     
    Code Snippet
    class Program
    {
        static void Main(string[] args)
        {
            double value = 1.234;
            Console.WriteLine(value.ToString());
            Console.ReadLine();
        }
    }

     

     

    注意:
    Visual Studioホスティングプロセスが有効な場合、F5キー(デバッグ開始)では変化しません。
    この場合、Ctrl+F5(デバッグなしで開始)を試してみて下さい。
    2008年6月14日 10:06
    モデレータ

すべての返信

  • 未熟者さん、こんにちは

    ダッチです。

     

     未熟者 さんからの引用
    パラメータがString型の場合 そのパラメータの内容が、"1,000"だった場合

    一般的に 数値チェックで 数値ではないと 判断されるのが正しいのでしょうか?

    どちらも正しいといえると思います。

    どのように振舞うかは、そのアプリケーションで決めていいと思います。カンマ区切りを数値として判断できるということは、それだけユーザの入力に対して寛容であるということです。ユーザからすると、そのほうが親切に思うことが多いと思います。

     

    ライブラリとして汎用的な振る舞いをしたいのであれば、どちらの振る舞いも出来るようにするといいのではないでしょうか。例えば Int32.TryParse メソッド では NumberStyles 列挙体を受け取ることができ、その値によってカンマ区切りを数値とするか、しないかなど細かく設定することができます。

    2008年6月14日 1:29
  •  

    ダッチ様

     

    ご返信ありがとうございます。

     

    ダッチ様の言われる通り、仕様に関しては熟考したいと思います。

     

    イメージ的には

    1 テキストボックスに値入力後 数値チェックをし、数値とみなされた場合は カンマ編集

    2 登録ボタン押下時に再度、テキストボックスの内容で 数値チェック

     

    を 考えていますので、カンマ区切り("1,000")を数値とみなす仕様でないと おかしくなりますね。

     

     

    ご教授 ありがとうございました。

     

     

    2008年6月14日 1:48
  •  未熟者 さんからの引用

    パラメータがString型の場合 そのパラメータの内容が、"1,000"だった場合

    一般的に 数値チェックで 数値ではないと 判断されるのが正しいのでしょうか?

    私自身としては 数値として判断されるのが正しいと思うのですが、いかがでしょうか?

     
    すでに書かれているようなスタイルの違いのほかに、カルチャや環境設定も確認したほうがよいと思います。
     
    一部のカルチャや環境では、整数部と小数部の区切り記号として "," が採用されていることがあり、
    そのような環境では、桁区切りがない状態でも 1 という数値として正しい表記になります。
     
    2008年6月14日 8:15
  •  K.Takaoka さんからの引用
    一部のカルチャや環境では、整数部と小数部の区切り記号として "," が採用されていることがあり、
    そのような環境では、桁区切りがない状態でも 1 という数値として正しい表記になります。
    地域と言語のオプションの「標準と形式」(XP)をドイツ語あたりにすると目に見えますね。
     
    次のコードで日本語とドイツ語の出力内容を見ると良いかもしれない。
     
    Code Snippet
    class Program
    {
        static void Main(string[] args)
        {
            double value = 1.234;
            Console.WriteLine(value.ToString());
            Console.ReadLine();
        }
    }

     

     

    注意:
    Visual Studioホスティングプロセスが有効な場合、F5キー(デバッグ開始)では変化しません。
    この場合、Ctrl+F5(デバッグなしで開始)を試してみて下さい。
    2008年6月14日 10:06
    モデレータ
  • こんにちは。中川俊輔 です。

     

    皆様、回答ありがとうございます。

     

    未熟者さん、フォーラムのご利用ありがとうございます。

    勝手ながら、有用な情報と思われる回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    未熟者さんはチェックを解除することもできますので、ご確認ください。

     

    それでは!

     

    2008年6月30日 9:21