パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

小数点はコンマかピリオドか」記事へのコメント

  • by Anonymous Coward
    国際化プログラミングでは、数値表現は日付や時間と同様にロケールによって変わるものです:
    ・数値: 1.0とか1,0とか、 -1とか1-とか
    ・通貨: 1,000,000 とか 1.000.000とか
    ・パーセント: 10% とか %10とか
    そのため、数値は各言語環境で用意している国際化フォーマット用のライブラリを使って文字列に変換します。
    標準が変わったとしても、変更があるのは所詮ライブラリの中の話です。
    # 数値フォーマットライブラリ使ってないで自分でカンマ入れて
    • by Anonymous Coward on 2003年10月11日 18時42分 (#413122)
      > 数値表現は所詮文字列上での話、大体はユーザーインタフェース周りの話なので、計算機屋さん(高度な数値計算プログラミングをする人?)には大して関係ないのでは。

      eval があるような処理系じゃどうするの?

      少なくとも perl じゃ "," を小数点として扱う方法は無いと思うな。

      #やっぱ小数点は "." だよなと思う元 FORTRANer
      親コメント
      • > eval があるような処理系じゃどうするの?

        漢数字をevalしますか?

        evalで解析したいのは 数値リテラルになってる文字列でしょ。
        カンマとかピリオドとかの話は、UIとか文章とかに埋めるものでしょ。

        もし同じものと思って使っているなら、それはた
        • > 上でも出てるけど strtod を使え。

          perllocaleとかにもきちんと載っている正式の方法ですね。
          少し補足すると、OSの機能を使っているので、きちんとロケールがそろっているOSでないとだめですね。(cygwinとかではまだ無理)。

          コード例:

          use POSIX qw(locale_h);
          use POSIX qw(strtod);
          use locale;

          $l1 = "2 / 5";
          $l2 = "3,5";

          $n = eval($l1);

          $original_locale = setlocale(LC_NUMERIC);
          setlocale(LC_NUMERIC, "de_DE");
          $nstr = sprintf("%g", $n);
          $m = strtod($l2);
          setlocale(LC_NUMERIC, $original_locale);

          print

クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人

処理中...