-1

2 つの 10 進数値を含むプレーン テキストで float 値を出力しようとしています (可能な場合)。たとえば、データベースに 229806210.039999 があった場合、229806210.04 として出力したいのですが、何らかの理由で科学表記法で出力されます: 2.29806208E8。これは、最後の 2 桁が 10 ではなく 08 であるという点で正しくありません。 . 数値を印刷する前に double および currency 形式に変換しようとしましたが、数値はまだオフです (最後の 2 桁が 10 ではなく 08 になっています)。この問題に対処する方法はありますか? これが私が今持っているものです:

float amount = 0;
amount = something.getAmount() //this will run the query
                              //to retrieve the amount stored in database (i.e. 229806210.039999)
Stringbuilder buffer = new StringBuilder();
buffer.append ("the amount = " + amount)
emailObject.setBody(buffer.toString());
emailService.sendEmail(emailObject);
4

6 に答える 6

3

あなたは何を使うべきですか?

DecimalFormat を使用する必要があります。必要なフォーマットのパラメーターを受け取り、フォーマッターを返します

ドキュメントはこちらから入手できます。

コードを見せてください!

Double number = 1144.034;
DecimalFormat format = new DecimalFormat("0.00");
System.out.println(format.format(price));

そして、出力は

1144.03
于 2013-01-07T21:25:55.323 に答える
2

DecimalFormatは、(場合によっては不要な)ロケールの小数点( "。"対、 "、")を提供します。最近、使用するように変更しました

double x= ...;
String formatted = String.format(Locale.US, "%.2f", x);

これははるかに便利です(Cスタイルの書式設定記号)

于 2013-01-07T21:31:46.750 に答える
2

これは Java に似ているので、DecimalFormat を参照してください。数値をフォーマットする方法はかなりよく文書化されています。

于 2013-01-07T21:25:07.587 に答える
0

float の精度は 10 進数で約 7 ~ 8 桁に制限されています。float に値を格納すると、後処理方法に関係なく、それ以上の有効桁数は期待できません。

于 2013-01-07T21:28:51.540 に答える
0

数値を印刷する前に double および currency 形式に変換しようとしましたが、数値はまだオフです (最後の 2 桁が 10 ではなく 08 になっています)。この問題に対処する方法はありますか?

double にキャストしてからでは手遅れであり、情報が失われています。

値が渡される可能性のあるすべての場所で double、つまり 64 ビット浮動小数点を使用する必要があります (または、データベースの場合は固定精度を使用できます)。


float金額(またはほとんどのもの)に最適な形式ではありません。代わりに double を使用することをお勧めします(または BigDecimal または固定精度の long )

それ以外の

Stringbuilder buffer = new StringBuilder();
buffer.append ("the amount = " + amount)
emailObject.setBody(buffer.toString());

あなたは書ける

emailObject.setBody(String.format("the amount = %.2f%n" , amount));

少なくとも 1 つの改行があることは「礼儀正しい」場合があります。;)

于 2013-01-07T21:39:18.863 に答える
0

浮動小数点数は、有効桁数が固定された近似計算用です。つまりfloat、数値の指数と、数値の最初の 24 桁の 24 桁 (10 進数で約 7 桁) のみが格納されます。番号は 7 桁を超えるため、四捨五入により残りの桁が切り捨てられます。

少なくとも、double数値を保持するには a を使用する必要があります。10 進数の有効桁数が 16 桁の場合、その大きさの数値について少なくとも 0.01 の差を表すことができます。ただし、計算は依然として概算にすぎません。

正確な表現と計算が必要な場合は、BigDecimal代わりに a を使用してください。

最後に、数値をフォーマットするには、NumberFormat を使用します。Java チュートリアルは、それを非常によく説明しています。

于 2013-01-07T21:37:06.683 に答える