質問

かなり基本的な質問-私はこの機能を実行しています:

private double convertMetersToFeet(double meters)
{
  //function converts Feet to Meters.
      double toFeet = meters;
      toFeet = meters*3.2808;  // official conversion rate of Meters to Feet
      return toFeet;
}

問題は出力です。たとえば、101の入力から337.36080000000004を取得します。 浮動小数点を切り捨てるための適切なプラクティスは何ですか?

以下の回答が仮定したように、4つの有効数字がコンバージョン率と一致したままになるようにします。

役に立ちましたか?

解決

NumberFormat インスタンス。

NumberFormat nf = NumberFormat.getInstance(Locale.UK);
nf.setMinimumFractionDigits(4);
nf.setMaximumFractionDigits(4);
System.out.println(nf.format(feet));

または DecimalFormat

DecimalFormat df = new DecimalFormat("0.0000");
System.out.println(df.format(feet));

後者(DecimalFormat)は、形式を明示的に指定する場合に使用され、前者(NumberFormat)はローカライズされた設定が必要な場合に使用されます。

4つの一貫した小数の場合、BigDecimalでドラッグする必要はありません。本当に長い距離で作業していない場合。

他のヒント

私は後世のために自分の質問に答えています。上記のDecimalFormat答えを使用しましたが、答えはメソッドの戻り値の型を考慮に入れませんでした。

完成したコードは次のとおりです。

  private double convertMetersToFeet(double meters)
{
  //function converts Feet to Meters.
      double toFeet = meters;
      toFeet = meters*3.2808;  // official conversion rate of Meters to Feet
      String formattedNumber = new DecimalFormat("0.0000").format(toFeet); //return with 4 decimal places
      double d = Double.valueOf(formattedNumber.trim()).doubleValue();
      return d;
}

正確な計算が必要な場合は、 BigDecimal の代わりにフロート。印刷時に切り捨てる場合は、 DecimalFormat

DecimalFormat df = new DecimalFormat ("0.00");
System.out.println(df.format(convertMetersToFeet(101)));

小数演算には java.math.BigDecimal を使用します。

印刷用でない場合は、エラーを気にしないでください。 337.36080000000004は337.3608と同じくらい正確です。これは、因子に有効数字が5桁、テスト入力に3桁しかないためです。 (そして、あなたの方法が337ではなく331だったことを確かに願っています)

ただし、別の質問から取得したこの行は、トリックを行うようです

double toFeet = ((int)(meters*3.2808*10000))/10000.0;

唯一の問題は、オーバーフローがはるかに高速であることです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top