97

小数点以下 2 桁のみの double 値を取得する方法。

例えば

もしも

i=348842.
double i2=i/60000;
tv.setText(String.valueOf(i2));

このコード生成5.81403333

しかし、私は欲しいだけ5.81です。

それで、私は何をすべきですか?

4

7 に答える 7

191

DecimalFormatを使用します。

DecimalFormat は、10 進数をフォーマットする NumberFormat の具体的なサブクラスです。西洋、アラビア、インドの数字のサポートなど、あらゆるロケールで数値を解析およびフォーマットできるように設計されたさまざまな機能があります。また、整数 (123)、固定小数点数 (123.4)、科学表記法 (1.23E4)、パーセンテージ (12%)、通貨 ($123) など、さまざまな種類の数値もサポートしています。これらはすべてローカライズできます。

コード スニペット-

double i2=i/60000;
tv.setText(new DecimalFormat("##.##").format(i2));

出力-

5.81

于 2012-06-09T08:06:27.533 に答える
147

どうString.format("%.2f", i2)ですか?

于 2012-06-09T08:39:48.500 に答える
29

ここでは、10 進数を短くする方法を示します。ここでは、小数点以下 4 桁まで短くします。

  double value = 12.3457652133
  value =Double.parseDouble(new DecimalFormat("##.####").format(value));
于 2012-12-13T05:38:30.707 に答える
17

他の多くの回答は、フォーマットのみを行います。このアプローチは、印刷形式だけでなく値を返します。

double number1 = 10.123456;
double number2 = (int)(Math.round(number1 * 100))/100.0;
System.out.println(number2);
于 2013-07-10T04:44:26.647 に答える
9

最善かつ最も簡単な解決策は (KISS) だと思います:

double i = 348842;
double i2 = i/60000;
float k = (float) Math.round(i2 * 100) / 100;
于 2012-06-09T09:16:32.860 に答える
3

数値を char シーケンスにフォーマットしているときに開発者の頭に最初に浮かぶべきことは、操作を元に戻すことができるようにするなどの詳細に注意する必要があります。

そして他の側面は、適切な結果を提供することです。したがって、数値を切り捨てるか、丸めます。

ですから、始める前に、価値に興味があるかどうかを自問する必要があります。

目標を達成するには複数のオプションがありますが、そのほとんどはFormatFormatterを参照していますが、この回答を見ることをお勧めします。

于 2012-06-09T09:09:44.743 に答える
3
i=348842.
double i2=i/60000;
DecimalFormat dtime = new DecimalFormat("#.##"); 
i2= Double.valueOf(dtime.format(time));
v.setText(String.valueOf(i2));
于 2012-06-09T08:15:40.427 に答える