- - PR -
DecimalFormat について
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-29 20:34
すごく初歩的なことなのかもしれませんが、
で、"0" と表示されるのはなぜでしょう? "" になるのを期待していたのですが。 | ||||||||||||
|
投稿日時: 2007-11-29 20:58
そりゃ、数値用のフォーマットで数値を表示するんだからねえ。
あんたの期待なんか関係ないよ。 | ||||||||||||
|
投稿日時: 2007-11-29 23:43
確かにjavadocには#の説明として
と書かれていますが…。 はっきりいえることはDecimalFormatは0という数字を1桁と扱うということです。 もし、0という数字が0桁扱いであれば空白となることでしょう。 しかし、数字のフォーマットにおいて、それは期待すべきものでしょうか? | ||||||||||||
|
投稿日時: 2007-11-30 00:04
まあ、わかるんですけどね。ゼロが1桁の数字だということは。 たとえば給与明細票とかで、データベース上はいくつかの支給項目にゼロが 入っているが、画面上(または帳票上)はゼロを出力したくない、というときは どのような方法を取りますか?
とかやるのが、ちょっと面倒だったので。 | ||||||||||||
|
投稿日時: 2007-11-30 09:13
NumberFormat#formatをオーバーライドして 上記処理を埋め込む。 | ||||||||||||
|
投稿日時: 2007-11-30 09:15
Excel や VB6 では、#,### と書式指定すれば 0 のときは空文字になりますよね。私も DecimalFormat は使い勝手が悪いと思っています。せめて、セミコロン区切りによる複数書式指定で、正数、負数、0、null の最大 4パターンの振り分けができたら良いのですが・・・。DecimalFormat では正数、負数の2パターンの振り分けしかできないうえに、負数パターンでのフォーマット動作がおかしい気がする・・・。
給与明細票ってことは業務系システム開発をしているのかな。今後もそういうことが続くのであれば、自作のフォーマッターを作っておくのが良いと思います。 | ||||||||||||
|
投稿日時: 2007-12-01 10:11
javaの数値フォーマッタの設計思想として
formatで変換したものをparseで戻せるようにしておきたかったのではないでしょうか? MessageFormatなどはどうなっているか分かりませんが、 数値や日付は逆変換できないと実用性がかなり低くなってしまうと思います。 parse時に、formatされた値で条件分岐しても良いですが、 それはオブジェクト指向から離れてしまう発想に思えます。
これは同意しかねます。 そもそも負数パターンはプレフィックスのみが使用されますので、他のFormatとインターフェースが統一されていると考えます。 パターンを値により変えるということをしてしまうと、利用者側の我々がおそらく混乱します。 (提示の例でいえば0, nullパターンへのアクセサメソッドなどは少なくとも追加されそうですし)
JavaのバグにはGUI系では結構ぶつかりますが、DecimalFormatでは遭遇したことがありません。 実装を思い返してみても結構使用していますので気になります。 特定バージョンの問題でしょうか? 「おかしい気がする」というのは抽象的に過ぎて見つけられそうにもありませんので 具体例(またはバグ報告のIDなど)を挙げていただけませんでしょうか?
同意です。 もちは餅屋ということで、帳票用の外部アプリ(クラス)を利用すべきかもしれませんが。 | ||||||||||||
|
投稿日時: 2007-12-01 14:47
なるほど、そうですね。 思うのですが、「0件」を特別扱いするか、ということに通じる問題のような気がします。Excel の #,### に限らず、自分で普通にフォーマッターを最低限コーディングすると数値の 0 は ""(長さ0の文字列)になるのが自然だと思います(もし "0" を出力する仕様にするならば、入力が 0 の時だけ特別に if で切り分けているはず)。また、小数も考えると、いっそう、そう思います。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} |
1|2|3
次のページへ»