Java浮動小数点数学-(フィート/メートルの変換)
-
03-07-2019 - |
質問
かなり基本的な質問-私はこの機能を実行しています:
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;
唯一の問題は、オーバーフローがはるかに高速であることです。
所属していません StackOverflow