如何在 java 中创建华氏度到摄氏度的转换

How to create a conversion of Fahrenheit to Celsius in java

对于华氏度和摄氏度,代码应该输出 a table:

public static void main(String[] args) {
    System.out.println("Fahrenheit\tCelsius");
    System.out.println("=======================");
     for(int temp = -45; temp <= 120; temp += 5) //for(int i = 0; i <= 100; i+= 10)
        {
            System.out.printf("%5d       |", temp);
            double sum = (temp + (9.0/5.0)) * 32;   
            System.out.printf("%5d", (int) sum );
            System.out.println();
        }
}  

您需要进行两项更改:

  • 移除转换为 int(因为它会使值失去精度)
  • printf 中使用“.1f”(因为您需要打印十进制数而不是整数)

下面应该有效:

System.out.printf("%10.1f", sum );

更好的方法是使用小数格式 class

import java.text.DecimalFormat;

int numberToPrint = 10.234;
DecimalFormat threePlaces = new DecimalFormat("##.#");  //formats to 1 decimal place
System.out.println(threePlaces.format(numberToPrint));

应该打印:

10.2

如果你想让输出结果看起来像table,你必须使用java.util.Formatter

我重写了你的代码片段,一点点:

public static void main(String[] args) {
    Formatter formatter = new Formatter(System.out);

    formatter.format("%-20s\n",      "---------------------------");
    formatter.format("%-10s %12s\n", "| Fahrenheit |", "Celsius |");
    formatter.format("%-20s\n",      "---------------------------");

    for (int farValue = -45; farValue <= 80; farValue += 5) {
        double celValue = (farValue + (9.0 / 5.0)) * 32;

        formatter.format("| %10d | %10.0f |\n", farValue, celValue);
    }
    formatter.format("%-20s\n", "---------------------------");
}

输出片段看起来完全像 a table:

---------------------------
| Fahrenheit |    Celsius |
---------------------------
|        -45 |      -1382 |
|        -40 |      -1222 |
 ...
|        -30 |       -902 |
---------------------------

How to create a conversion of Fahrenheit to Celsius in java

恕我直言,最重要的一步是在考虑编码之前了解问题。

维基百科是一个好的开始,搜索 Celsius 它给我们:

[°C] = ([°F] − 32) ×  5⁄9

在 Java 中类似于:

celsius = (fahrenheit -32.0) * 5.0 / 9.0;

我认为最好用单独的方法来做,这样更容易测试:

public static double fahrenheitToCelsius(double fahrenheit) {
    double celsius = (fahrenheit - 32.0) * 5.0 / 9.0;
    return celsius;
}

注意 1:值得在继续之前测试此方法 - 两个重要的温度是:

  • 32°F == 0°C(冰的熔点)
  • 212°F == 100°C(水的沸点)

所以只要做一些快速而肮脏的事情,比如:

System.out.println("32 == " + fahrenheitToCelsius(32));
System.out.println("212 == " + fahrenheitToCelsius(212));

更好,在这种简单的情况下可能有点重,是使用像 JUnit 这样的框架。

注意 2:要创建 table,请按照问题中的说明进行操作,但只有一个 printf 可以利用将格式集中在一个地方的优势(显然是在调用上述方法之后):

System.out.printf("%5.0f | %5.1f\n", fahrenheit, celsius);

注意 3:注意 5/9 - 在 Java 中被解释为整数除法,结果为零!

(以上代码只是示例,未经测试或调试