Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

分数をつかった計算

分数を使って華氏を摂氏に直すプログラミングを以下のように作りました。


public class FhrenheitToCelsius {
        public static void main(String[] args) {
        
        double FhrenheitToCelsius=98.6;
        double a=32;
        double b=5/9;
        double celsius=(FhrenheitToCelsius-a)*b;
        
        System.out.println(FhrenheitToCelsius + "F=" + celsius + "C");
    }
}

コンパイルして実行してみたのですが、

98.6F=0.0C

という結果が出てしまいます。

どうやら分数のところ(b=5/9)の部分がいけないようなのです。おそらく「5/9=0」と認識されているみたいです。 どうすればちゃんと0じゃないと認識させることができるのでしょうか?
ご協力よろしくお願いいたします。

5

回答

6153

閲覧

5件の回答

評価

0

int / int = intになります。

評価

0

double = 5D/9D

評価

0

本当に分数を使うなら、Commons MathのFractionクラスを使用して、

Fraction b = new Fraction(5, 9);

として、b.doubleValue()で値を取得するのかな。詳しくはJavadoc見てください。

http://commons.apache.org/math/apidocs/org/apache/commons/math/fraction/Fraction.html#Fraction(int,%20int)

評価

0

(案)
5/9を例えば、5.0/9のようにする。

>分数を使って華氏を摂氏に直すプログラミングを以下のように作りました。

「5/9」という表記はあくまで5割る9という意味で、
分数とは異なります。
(分数を扱う手段は標準では用意されていません)

さらに、数学で5÷9と言えば、0.55555555・・・というような小数になるところですが、Javaでは単純にそうなるわけではありません。

Javaでは割る数と割られる数が両方整数の場合、
計算結果の型も整数型で算出されます。
小数以下は切捨てられるので、5/9の結果は0になります。

では、どうすればよいかというと、
「割る数と割られる数が両方整数の場合」と書きましたが、
割る数、割られる数のどちらか、または、両方の値が小数であれば、結果も小数として算出されます。

5/9を5.0/9 などのように変更することで
Javaコンパイラにそのように伝えることができます。
(5/9は整数/整数、5.0/9は浮動小数点数/整数と解釈されます)

評価

0

ありがとうございます!
整数だった5を少数5.0に変えたら上手くいきました!

たしかに5/9だと=0になってしまいますね。
こういう小さなミスだけでも上手くいかないのでものすごく注意してやらないと。。。

でもできたときはすごく楽しいです。

本当にありがとうございます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。