4

時間を分に、またはその逆に変換する正しい数式が必要です。コードを書きましたが、期待どおりに動作しないようです。例: 時間 = 8.16 の場合、分は 490 になるはずですが、結果は 489 になります。

  import java.io.*;
  class DoubleToInt {

  public static void main(String[] args) throws IOException{

  BufferedReader buff = 
  new BufferedReader(new InputStreamReader(System.in)); 
  System.out.println("Enter the double hours:");
  String d = buff.readLine();

  double hours = Double.parseDouble(d);
  int min = (int) ((double)hours * 60);

  System.out.println("Minutes:=" + min);
  }
} 
4

2 に答える 2

9

これは、キャストすると小数部分がint 切り捨てられるためです。丸められません。

8.16 * 60 = 489.6

にキャストするintと489になる。

計算に使用することを検討しMath.round()てください。

int min = (int) Math.round(hours * 60);

注:doubleは精度が限られており、「小さな残余誤差」の問題がありますが、 を使用Math.round()すると、面倒な処理を行うことなく問題をうまく解決できますBigDecimal(ここでは、惑星間ロケットの軌道を計算していません)。

参考までに、分を時間に変換するには、次を使用します。

double hours = min / 60d; // Note the "d"

6060 a を作成するには、後に「d」が必要ですdouble。そうしないintと、結果が anintになりhours、整数が 2 倍になります。それを にすることでdouble、計算のために Java アップキャスト min を double にします。これはあなたが望むものです。

于 2011-08-12T08:52:42.540 に答える
0

8.16 X 60は489.6になり、この値をintに変換すると、489になります。

int a = (int)489.6;
      System.out.println("Minutes:=" + a);
于 2011-08-12T08:59:19.027 に答える