-1

Book Art and Science of Java の課題の解決策として、キログラムを対応するポンドとオンスの値に変換するプログラムを作成する必要がありました。私はプログラムを書きましたが、例えば 1kg を変換しようとすると、プログラムが与える結果は次のようになります: 1kg = 2 ポンドと 3.200000000000006 オンス

現在、私の定数は 1 kg あたり 2.2 ポンド、1 ポンドあたり 16 オンスなので、3.2 オンスが正しいです。しかし、それほど多くの 0 があるわけではなく、最後の 6 は私をびっくりさせます。

なぜこれが起こるのか、どうすれば解決できるのか知っている人はいますか? ありがとうございました!

コードは次のとおりです。

/*
* File: KgsLibras.java
* Program that converts kilograms in pounds and ounces.
*/

import acm.program.*;

public class KgsLibras extends ConsoleProgram {
public void run () {
    println ("This program will convert kilograms in pounds and ounces");
    double kgs = readDouble ("Insert kgs value: ");
    double libras = kgs * LIBRAS_POR_KG;
    double oncas = (libras - (int)libras) * ONCAS_POR_LIBRA; 
    println ((int)libras + " libras" + " e " + oncas + " Onças.");
    }
private static final double LIBRAS_POR_KG = 2.2;
private static final int ONCAS_POR_LIBRA = 16;
}
4

2 に答える 2

2

これは、浮動小数点がどのように機能するかの結果にすぎません。文字通り、SO だけでこれらの問題への他の何千もの参照があります。短いバージョンは、浮動小数点数を使用してすべての数値を正確に表現できるわけではないということです。 このドキュメントは、浮動小数点について知っておくべきことをすべて教えてくれるはずです。

それまでの間、format を使用して printf のような書式設定オプションを取得できます。

System.out.format ("%.0f libras e %.2f Onças.\n",libras,oncas);

または、その特定の println メソッドを使用する必要がある場合は、String の形式を使用します。

println(String.format ("%.0f libras e %.2f Onças.",libras,oncas) );
于 2013-03-30T22:12:04.283 に答える
0

次のようなことができます。

String libras = String.format("$%.2f", VALUE); //For example..

その後、印刷librasはあなたのニーズに合います。

あなたのプログラムがそのように印刷する理由についてのあなたの質問に関して、@fvuは私よりも速かった:)

于 2013-03-30T22:11:22.450 に答える