2013-06-06 4 views
0

У меня в настоящее время проблема с моим кодом. Я должен объявить часы и минуты, как int, и totalTimeHours как double. totalTimeHours используется для хранения общего времени в часах, ex 6.555 hrs. Проблема, над которой я работаю, требует ответа, который можно найти в часах и минутах, например, . 6 часов и 36 минут. Для моего финального пробега мне нужно использовать 14,7 для галлонов используемого газа и 359,5 для расстояния. Я использовал часы = (int) totalTimeHours для извлечения всего числа 6 , и я должен найти оставшееся время, оставшееся и умножить на 60, чтобы найти минуты, , но это то место, где меня задерживают.Преобразование int, чтобы удвоить Java

Ниже мой код:

public static void computeMilesPerGallon() 
    { //start brackett for computeMilesPerGallon 

    double gallons, distance, mpg, totalTimeHours; //totalTimeHours is the total time in just hours 
                     //for example totalTimeHours = 6.5555 hrs 
    int minutes, hours; 
    final String DASHES = "-----------------------------------------------"; 
    final double AVERAGE_SPEED = 54.5;  

    DecimalFormat oneDecimalDigits = new DecimalFormat ("0.0"); //prints decimal to 1 places 
    DecimalFormat threeDecimalDigits = new DecimalFormat ("0.000"); //prints decimal to 3 places 

    System.out.println ("\n\t\t\tSpeed Problem"); 
    System.out.println ("\t\t\t-------------"); 
    System.out.print ("\n\t\tEnter in the gallons of gas used: "); //gets gallons of gas used 
    gallons = scan.nextDouble(); 

    System.out.print ("\t\tEnter in the total distance driven: "); //gets total distance driven 
    distance = scan.nextDouble(); 

    mpg = distance/gallons; //calculates mpg 
    System.out.println ("\t\tThis is your miles per gallon (mpg): " + oneDecimalDigits.format(mpg)); 
                     //displays mpg 
    //calculates time// 
    totalTimeHours = distance/AVERAGE_SPEED; 

    //below line displays total time in hours to 3 decimal places 
    System.out.println ("\n\t\tThis is was your time in hours: " 
             + threeDecimalDigits.format(totalTimeHours)); 

    //extracts hours from time in hours 
    hours = (int)totalTimeHours; 
     minutes = Math.round((totalTimeHours - hours) * 60); 

    //prints total time in hrs and minutes 
    System.out.println ("\t\tThis is the total time in hours and minutes: " + hours 
              + " hours and " + minutes + " minutes"); 

    System.out.println ("\t" + DASHES); 

    } 
+0

вы можете вызвать intValue на объекте Double, чтобы получить целое число. – NeplatnyUdaj

+1

вычесть целое число из числа double для получения остатка. – jtahlborn

ответ

5

Replace:

minutes = Math.round((totalTimeHours - hours) * 60); 

С:

minutes = Math.round((float)((totalTimeHours - hours) * 60)); 

или

minutes = (int)Math.round((totalTimeHours - hours) * 60); 

Есть два способа круглый по математике

long Math.round(double); 
int Math.round(float); 

Вы передаете в двойном аргументе так вы называете тот, который returnes долго и вы назначаете его int, это неправильно.

+0

это удалось скомпилировать, но ответ в минутах - 35. Поэтому я попытался использовать: System.out.println («часы и минуты:» + часы + Math.round (минуты)); // но я все еще получаю 35 минут. Мне нужно 6 часов 36 минут. Интересно, почему Math.round (минуты) не округляется до 36. –

+0

@ user2460398 О, я вижу. Итак, если у вас есть 35,6, вы хотите получить 36, а если у вас 35,4, вы хотите получить 35? Math.round ((float) ((totalTimeHours - hours) * 60)); , Math.round (минуты) не округляется, потому что минуты - целое число, вы не можете округлить целое число. – SteveL

+0

Большое спасибо. Я использовал: minutes = (int) Math.round ((totalTimeHours - hours) * 60); // и смог заставить его работать с желаемыми результатами. Я пытался использовать пробную версию и ошибки в разных комбинациях int и Math.round, я не думал об этом синтаксисе. Еще раз спасибо!! –

0

Я не читал весь код, но это должно помочь решить эту проблему вы описали в тексте:

double dTime = 6.555; 
    int hours = (int) dTime; 
    int minutes = (int) ((dTime - hours) * 60); 
    System.out.println(hours + ":" + minutes); // prints 6:33 
Смежные вопросы