• Martin Thoma
  • Home
  • Categories
  • Tags
  • Archives
  • Support me

Java Puzzle #2: Integers and Floats

Contents

  • Java Puzzle #2: Integers and Floats
    • Basics
    • The puzzle
    • Answer
    • Explanation

Basics

As you might know, Americans measure the temperature in Fahrenheit. I'm not quite sure, but I guess the rest of the world uses Celsius.

0° C is the temperature when water freezes. 100° C is the temperature when water boils.

0° F is the lowest temperature of the winter 1708/1709 in Gdańsk. 32° F is the temperature when water boils.

If you want to calculate the temperature \(T_C\) in °C from \(T_F\) in °F you can use this formula: \(T_C = (T_F − 32) · \frac{5}{9}\)

The puzzle

What is the output of the following script?

public class test {
    static double fahrenheitToCelsius(double fahrenheit) {
        return (fahrenheit - 32) * (5 / 9);
    }

    public static void main(String[] args) {
        double fahrenheit = 100;
        double celsius = fahrenheitToCelsius(fahrenheit);
        System.out.format("%.2f° Fahrenheit is %.2f° C\n",
                fahrenheit, celsius);

        fahrenheit = 30;
        celsius = fahrenheitToCelsius(fahrenheit);
        System.out.format("%.2f° Fahrenheit is %.2f° C\n",
                fahrenheit, celsius);
    }
}

. . . . . . . . . . . . . . . . . . . . . . . . .

Answer

100.00° Fahrenheit is 0.00° C
30.00° Fahrenheit is -0.00° C

Explanation

The problem is integer division.

public class test {
    public static void main(String[] args) {
        System.out.format("5 / 9 = %.2f\n", (double) (5 / 9));
    }
}

This outputs:

5 / 9 = 0.00

So you are multiplying with \(\pm 0\) instead of \(0.55555\).


Published

Jul 16, 2012
by Martin Thoma

Category

Code

Tags

  • Java 36
  • Programming 52
  • puzzle 22

Contact

  • Martin Thoma - A blog about Code, the Web and Cyberculture
  • E-mail subscription
  • RSS-Feed
  • Privacy/Datenschutzerklärung
  • Impressum
  • Powered by Pelican. Theme: Elegant by Talha Mansoor