42

重複の可能性:
Java で数値を小数点以下 n 桁に丸める方法

float を小数点以下 2 桁に丸めるのに問題があります。単純に を使用するなど、ここで見たいくつかの方法を試しましたMath.round()が、何をしても異常な数値が得られ続けます。

処理中のフロートのリストがあり、リストの最初は として表示され1.2975118E7ます。とは何E7ですか?

(f は float です)を使用するとMath.round(f)、まったく同じ数値が得られます。

私は何か間違ったことをしていることを知っていますが、何がわからないだけです。

数値を の形式にしたいだけですx.xx。最初の数字は1.30などです。

4

4 に答える 4

122

1.2975118E7科学表記法です。

1.2975118E7 = 1.2975118 * 10^7 = 12975118

また、Math.round(f)整数を返します。それを使用して目的の形式を取得することはできませんx.xx

を使用できますString.format

String s = String.format("%.2f", 1.2975118);
// 1.30
于 2012-06-17T15:12:19.373 に答える
55

通貨の書式設定を探している場合 (指定していませんが、それが探しているようです)、このNumberFormatクラスを試してください。とても簡単です:

double d = 2.3d;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String output = formatter.format(d);

どちらが出力されますか (ロケールによって異なります):

$2.30

また、通貨が必要ない場合 (正確に小数点以下 2 桁のみ)、代わりにこれを使用できます。

NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(2);
String output = formatter.format(d);

どちらが出力されますか2.30

于 2012-06-17T15:19:02.677 に答える
8

DecimalFormatご希望のスタイルに合わせてお使いいただけます。

DecimalFormat df = new DecimalFormat("0.00E0");
double number = 1.2975118E7;
System.out.println(df.format(number));  // prints 1.30E7

これは科学的表記法であるため、10 7よりも小さい数を取得することはできず、その桁数の精度を失うことはありません。

于 2012-06-17T15:21:21.737 に答える
0

BigDecimalクラスを調べてみてください。これは、通貨の主要なクラスであり、正確な丸めをサポートします。

于 2012-06-17T15:12:06.937 に答える