2017-03-03 1 views
0

Oracleデータベースでは、フォーマット番号(17,2)の列に数値0.5を格納します。 そして私はJavaプログラム(mybatisを使用)を使ってそれを読んで、エンティティオブジェクトの文字列フィールドとして格納します。この文字列フィールドの値は ".5"であり、私が期待しているように "0.5"ではありません。浮動小数点数(0から1の間の数値)を文字列に変換するときにゼロが存在しない理由

「.5」は浮動小数点数の標準表現であり、ほとんどのプログラミング言語では0.5に直接変換することができます。しかし、Webページに表示されたときに、私が欲しいのではない。もちろん、最初の文字が "。"かどうかを確認するだけで、いつでも "0.5"に変換できます。私はそれは簡単で忘れやすいと思います。

また、Oracle関数を使用して数値を文字列に変換する形式を指定することもできます。しかし、TO_CHAR()関数は、出力文字列を固定長にするためにフォーマットパターンをパラメータとして取り、0.5を ".5"として出力するフォーマットパラメータを取りません。どちらの行動も私が望むものではありません。私はちょうど数字を変換するための "それなりの"方法が欲しい。しかし、オラクルの "それなりの"方法は私が望むものではありません。

質問したい:

この問題を解決するにはどうすればよいでしょうか?

+1

あなたはどのJavaプログラムでそれを読んでいますか?エンティティオブジェクトのStringフィールドとして格納する方法は?なぜ?これは 'double'以上、おそらく' BigDecimal'でなければなりません。 – EJP

+0

@EJPはい、最後にBigDecimalとして保存しました。そして、最高の答えとしてコメントを選ぶにはどうすればいいですか? –

答えて

0

数字の値とその表現を混同しないでください。

0.5.51/2, 2-1334/6680.12と0000000.50000000000全てまったく同じ値です。

値を特定の方法でフォーマットする場合は、値を文字列に変換するときに値を指定する必要があります。

+0

私が尋ねるのは、値をソースから文字列に変換するときの形式を指定する方法です(この状況では、Oracleデータベースまたはmybatisです。 –

0

私はmybatisに慣れていませんが、 はちょうどdoubleと読んでからフォーマットしてください。 10進フォーマッタを使って?

DecimalFormat df = new DecimalFormat("0.00"); df.format(number);

関連する問題