web-dev-qa-db-ja.com

Javaで浮動小数点を小数点以下2桁に丸める必要があります

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

Floatを小数点以下2桁に丸めるのが困難です。私はここで見たいくつかの方法を試してみましたが、単にMath.round()を使用するだけです。

私が処理しているフロートのリストがあり、リストの最初は_1.2975118E7_として表示されます。 _E7_とは何ですか?

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

私は何か間違ったことをしていることを知っています。

数字を_x.xx_の形式にするだけです。最初の番号は_1.30_などである必要があります。

33
lonewookie

_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
_
95
Alexander

通貨のフォーマット(指定しなかったが、それがあなたが探しているものであると思われる)を探しているなら、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を出力します

50
kcoppock

DecimalFormat を使用して、希望するスタイルを指定できます。

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

科学表記法であるため、10未満の数値を取得することはできません7 精度の桁を失うことなく。

8
Makoto