Как написать математическую формулу на Java - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь найти способ преобразования килограммов (введенных пользователем) в камень и фунты.

Например:

Пользователь вводит вес в 83,456 кг, умножьте это на2.204622, чтобы преобразовать в фунты = 184 фунта, разделить 184 фунта на 14, чтобы преобразовать в камень = 13.142 камня.

Используйте первые две цифры (13) для камня и разделите оставшуюся часть, чтобы умножить на 14, чтобы получить фунты,0,142 (это остаток) x 14 = 1,988 фунта, или есть другой способ получить этот результат?

Следовательно, вес человека составляет 13 камней и 2 фунта (с округлением в большую или меньшую сторону).

Вот что у меня есть (это работает) до сих пор:

pounds = kgs*2.204622;  
System.out.printf("Your weight in pounds is: %.0f" , pounds);
System.out.print(" Ibs\n");
stone = pounds / 14
//Can't figure out how to finish the formula in code

Ответы [ 3 ]

2 голосов
/ 26 октября 2019

Если вы ищете расширяемую, готовую к использованию библиотеку, вы можете рассмотреть возможность использования бесплатной библиотеки с открытым исходным кодом. UnitOf

. Предлагает 30+ преобразований изкоробка для масса .

Пример :

double kgFromPound = new UnitOf.Mass().fromPounds(5).toKilograms(); 

double poundFromKg = new UnitOf.Mass().fromKilograms(5).toPounds(); 

Надеюсь, это поможет!

2 голосов
/ 26 октября 2019

Я предполагаю, что вы объявили pounds и stone, прежде чем использовать их здесь (то есть с float pounds; или double pounds; или float pounds = чем-то), иначе код не скомпилируется иначе.

Один из способов сделать это состоит в том, чтобы сделать это в 2 отдельных шага, как показано ниже:

double kg = 83.456;
double pounds = kg * 2.204622;

double stonesWithDecimal = pounds / 14;

int stone = (int) stonesWithDecimal; // Strip off the decimal
long poundsWithoutStone = Math.round((stonesWithDecimal - stone) * 14); // Take the fractional remainder and multiply by 14
System.out.println("Stone: " + stone + "\nPounds: " + poundsWithoutStone);

Предложение Андреаса определенно намного чище, хотя я хотел представить оба варианта, так как я не уверен, что выУровень знакомства с использованием модуля по программированию. Вот одна из реализаций этого предложения, хотя вы можете сделать это несколькими различными способами с точки зрения работы с типами данных (Math.round хочет вернуть long):

double kg = 83.456;
double pounds = kg * 2.204622;

int stone = (int) pounds / 14;
pounds = (double) Math.round(pounds %= 14);

System.out.println("Stone: " + stone + "\nPounds: " + pounds);
0 голосов
/ 26 октября 2019

Правильное решение раундов рано. Вот код, предложенный моим первоначальным комментарием :

double kgs = 83.456;
long pounds = Math.round(kgs*2.204622);
System.out.println("Your weight is " + pounds / 14 + " stone and " + pounds % 14 + " pounds");

Вывод

Your weight is 13 stone and 2 pounds

Если вместо этого вы используете 69,853 кг, вы получите

Your weight is 11 stone and 0 pounds

, но это то, где дело может оказаться рискованным, если вы не округлились раньше.


Оба решения в (в настоящее время приняты) Ответ молнии неверен, так как они округляются в неподходящее время. Есть причина, по которой вы должны округлить досрочно.

Если вы перейдете на использование 69,853 кг в этих двух решениях, вы получите

Solution 1:
  Stone: 10
  Pounds: 14

Solution 2:
  Stone: 10
  Pounds: 14.0

Оба, очевидно, неверны, поскольку Pounds не должнобыть 14, иначе 1 камень.

Причина ошибок округления становится очевидной, если вы печатаете значения без округления

double kgs = 69.853;
double pounds = kgs*2.204622;
System.out.println(pounds + " lbs = " + pounds / 14 + " stone and " + pounds % 14 + " pounds");

Вывод

153.99946056599998 lbs = 10.999961468999999 stone and 13.999460565999982 pounds
...