2012-06-17 41 views
24

で小数点以下2桁の可能性の重複をフロートを丸めるする必要があります:私は小数点以下2桁floatを丸め困難を抱えてい
How to round a number to n decimal places in Javaは、私は、Java

。私はここで、単にMath.round()を使用することを含めていくつかの方法を試しましたが、私が何をしていても珍しい数字が得られます。

私が処理している浮動小数点のリストがあります。リストの最初は1.2975118E7と表示されます。 E7とは何ですか?

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

私は何か間違っていることを知っています、私はちょうど何がわかりません。

数字はx.xxの形式にしてください。最初の番号は1.30などです。

+2

浮動小数点数の文字列*表示*を丸めたいとします。あなたはおそらく番号自体を丸めたくありません。浮動小数点を避け、精度を上げるためにdoubleを使用し、String.format(...)、NumberFormat、DecimalFormatなどの2進数の適切なString表示に使用可能な多くのメソッドの1つを見てください。 –

答えて

-3

BigDecimalクラスを参照してください。通貨をクラス分けし、正確な丸めをサポートします。

+1

私は理解していないより明確化を提供できますか? – nsfyn55

71

1.2975118E7scientific notationです。

1.2975118E7 = 1.2975118 * 10^7 = 12975118 

また、Math.round(f)は整数を返します。あなたはそれを使用して希望のフォーマットを得ることはできませんx.xx

String.formatを使用できます。

String s = String.format("%.2f", 1.2975118); 
// 1.30 
+1

'String.format'は、ロケールに応じてドットまたはコンマで浮動小数点数を作成するため、問題を発生させる可能性があります。 –

+0

@YoannHercouet、あなたはロケールを考えずにフロートで遊んで回ることはできません。それは問題ではありません。 ;-) – Alexander

+4

これを使用してください:String.format(Locale.US、 "%.2f"、1.2975118)より安全です..少なくともあなたは常にフォーマットを知っています... –

36

あなたは通貨の書式を探しているなら(あなたが指定されていませんでしたが、それはあなたが探しているものであると思われる)NumberFormatクラスを試してみてください。これは非常に簡単です:

(ロケールに依存する)出力は以下となります
double d = 2.3d; 
NumberFormat formatter = NumberFormat.getCurrencyInstance(); 
String output = formatter.format(d); 

$2.30

また

、通貨が必要とされていない場合(単に正確な小数点以下)あなたの代わりにこれを使用することができます:

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

が出力されます2.30

+0

誰でも私の答えにdownvotesを説明したいと思いますか?誠の? – kcoppock

+0

わかりません。実際の問題に最初に取り組んだのは浮動小数点数の書式化された文字列表現なので、私はあなたと@Makatoに投票しました。 –

+1

@ Hovercraft Eelsの満ちている:ありがとう;私もマカトに投票しました。これは重複した質問としてマークされているので、私はそれは誰かが嫌だと推測することができますか?答えを無効にしません。 Sidenote、あなたは私が今までに見た中で最高のユーザー名を持っているかもしれません。 – kcoppock

6

DecimalFormatを使って、あなたが望むスタイルをあなたに与えることができます。

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

それは科学表記法でなので、あなたは、精度の大きさの多くの受注を失うことなく、10 より任意の小さな数を取得することはできません。

+0

皆様のおかげです。科学的な表記法は私を得たものでした。数字は同じですが、それは機能していないと思っていましたが、私の数は最初から間違っていました! – lonewookie

+0

私はこれからfloat値を返すことができます:float roundofDecimal(float dd){ \t DecimalFormat df = new DecimalFormat(); \t df.setMaximumFractionDigits(2); \t System.out.println(df.format(dd)); \t \t return df.format(dd); } – CoronaPintu

+1

@PintuCorna:いいえ - DecimalFormatから浮動小数点を戻す方法がないように見えません。すべての正直なところでは、あなたがダブルからフロートに行くなら、精度が失われています。また、数値を書式設定することは、データを読んでいる人にとっての形式です。生の浮動小数点数が必要な場合は、*を返すだけです! – Makoto