Почему мой расчетный ответ Java немного выше по сравнению с калькулятором TI-84 Plus и расчетным ответом Google, хотя я использовал ту же формулу? - PullRequest
0 голосов
/ 08 февраля 2020

Обзор

Используя Dr Java, я вычислил "Оцененные поврежденные растения кукурузы" на основе инопланетного вторжения, которое оставило круг на полях x диаметр в футах (пользовательский ввод ). Я сделал расчет, чтобы определить, что акр равен 43560 футам 1 акру. На каждый уничтоженный акр уничтожается 30000 растений кукурузы.

Вывод, который я прошу уточнить, почему моя программа получает немного другой ответ, чем мой калькулятор, - «Предполагаемое повреждение растений кукурузы».

Мой вывод из моей Java программы, когда пользователь вводит 80

Оценка поврежденных растений кукурузы: 3462

Мой калькулятор и Окончательный расчет Google того же диаметра

Предполагаемые поврежденные растения кукурузы: 3450

My Worded Solution

I получаю другой вывод, потому что переменная dAcres отформатирована для округления до 3 десятичных знаков для вывода, но значение, которое она использует для расчета, не округляется. Например, когда пользователь вводит 80 в качестве диаметра, переменная dAcres выводит 0,115. Однако вместо этого переменная dAcre в своих вычислениях использует .11539.

Окончательный вопрос

Как мне сделать так, чтобы в моем расчете использовалось только 3 знака после запятой вместо значения по умолчанию количество знаков после запятой? Пример: 0,115 вместо 0,11539?

Мой код

import java.util.*;
import java.text.*;


public class Lab2_Problem2
{
  public static final double dPI = 3.14159;

  public static void main(String[] args )
  {
    // DECLARATIONS
    // Input-capture variables
    double dDiameter;

    // Expression-result variables
    double dArea;
    double dAcres;
    double dCornPlantsDamaged;

    // Other variables
    double dRadius;
    double dRadiusSquared;

    // Instantiations
    Scanner cin = new Scanner(System.in);
    DecimalFormat dfDiameter = new DecimalFormat("#######");
    DecimalFormat dfArea = new DecimalFormat("#######.00");
    DecimalFormat dfAcres = new DecimalFormat("##0.000");
    DecimalFormat dfCornPlantsDamaged = new DecimalFormat("#####");

    // INITIALIZE 
    // INPUT
    System.out.print("Enter crop circle diameter in feet: ");
    dDiameter = cin.nextDouble();

    // PROCESSING AND CALCULATIONS
    dRadius = dDiameter / (double) 2;
    dRadiusSquared = dRadius * dRadius;
    dArea = dPI * dRadiusSquared;
    dAcres = dArea / (double) 43560;
    dCornPlantsDamaged = dAcres * (double) 30000;

    // OUTPUT
    System.out.println("Crop circle diameter: " + dfDiameter.format(dDiameter) + " feet");
    System.out.println("Square feet: " + dfArea.format(dArea));
    System.out.println("Acres: " + dfAcres.format(dAcres));
    System.out.println("Estimated corn plants damaged: " + 
dfCornPlantsDamaged.format(dCornPlantsDamaged));
  }
}

Вопросы и ответы

  1. Почему вы хотите рассчитать на 3 знака после запятой, если ваш калькулятор не будет делать это?
    1. Поскольку я хотел бы, чтобы выходные данные соответствовали выполняемым расчетам.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Вот рабочий код в примере формы из ответа @ cricket_007.

dTruncOne = dAcres * 1000;
dTruncTwo = (int) dTruncOne * (double) 30000; // Truncated acres
dCornPlantsDamaged = dTruncTwo / (double) 1000;

dBushelsPerAcre = 211;
dCostPerBushel = 3.90;
0 голосов
/ 08 февраля 2020

Как мне сделать так, чтобы в моем расчете использовались только 3 десятичных знака

Умножьте его до полного целого числа, урезав десятичное число, а затем разделите его обратно до десятичного числа

((int) (0.11539 * 1000)) / 1000.0

Кроме того, есть Math.round метод

Ваш калькулятор не будет использовать 3 десятичных знака, поэтому я не уверен, почему вы захотите

И, для простоты, вы можете написать формулы следующим образом:

destroyed_acres = ((pi * (d/2)^2) ft) * (acre/ft) 
ans = (corn/acre) * destroyed_acres

FWIW, говорит Вольфрамальфа: 3462

https://www.wolframalpha.com/input/?i=+%28%28pi+*+%2880%2F2%29%5E2%29+square+feet%29+to+acres+*+30000

Google делает тоже (π × (80 ÷ 2)^2) × (1 ÷ 43560) × 30000

...