title: Java 8 BigDecimal multiply method losing precision when being inverted
body: <p>Java 8 here. According to Google:</p>
  
  <ul>
  <li>Converting pounds to kilograms: <a href="https://www.google.com/search?ei=EzWLWu-nLqafjwSK2avgBA&amp;q=convert+pound+to+kilogram&amp;oq=convert+pound+to+kilogram&amp;gs_l=psy-ab.3..0i71k1l8.19422.19422.0.19661.0.0.0.0.0.0.0.0..0.0....0...1c..64.psy-ab..0.0.0....0.YmCE8djCb0A" rel="nofollow noreferrer">multiply by 0.453592</a></li>
  <li>Converting kilograms to pounds: <a href="https://www.google.com/search?ei=NjWLWuiwFOHXjwTGn4KIDw&amp;q=convert+kilogram+to+pound&amp;oq=convert+kilogram+to+pound&amp;gs_l=psy-ab.3..0i20i263k1j0j0i22i30k1l8.2671.5677.0.5829.13.13.0.0.0.0.264.1414.1j5j2.8.0....0...1c.1.64.psy-ab..6.7.1172...0i7i30k1j0i8i30k1.0.0uHSoj_LNqo" rel="nofollow noreferrer">multiply by 2.20462</a></li>
  <li>Converting inches to meters: <a href="https://www.google.com/search?ei=PDWLWuPkO6XNjwTc67ToCg&amp;q=convert+inch+to+meter&amp;oq=convert+inch+to+meter&amp;gs_l=psy-ab.3...12538.14145.0.14255.9.7.0.0.0.0.316.316.3-1.1.0....0...1c.1.64.psy-ab..8.1.316...0i7i30k1j0i8i30k1.0.nu8VVUG09UU" rel="nofollow noreferrer">multiply by 0.0254</a></li>
  <li>Converting meters to inches: <a href="https://www.google.com/search?ei=TDWLWuqxCITjjwSslpP4BQ&amp;q=convert+meter+to+inch&amp;oq=convert+meter+to+inch&amp;gs_l=psy-ab.3..0l7j0i20i263k1.11538.13160.0.13417.9.7.0.0.0.0.354.599.2-1j1.2.0....0...1c.1.64.psy-ab..7.2.598...0i7i30k1j0i30k1j0i8i30k1.0.1mTCB4u4azo" rel="nofollow noreferrer">multiply by 39.3701</a></li>
  </ul>
  
  <p>So I whipped up this little Java code:</p>
  
  <pre><code>public class MeasurementConverter {
      private static final int SCALE = 2;
  
      public static void main(String[] args) {
          new MeasurementConverter().run();
      }
  
      private void run() {
          BigDecimal hundredLbs = new BigDecimal(100.00);
          BigDecimal hundredInches = new BigDecimal(100.00);
  
          System.out.println(hundredLbs + " pounds is " + poundsToKilos(hundredLbs) + " kilos and converts back to " + kilosToPounds(poundsToKilos(hundredLbs)) + " pounds.");
          System.out.println(hundredInches + " inches is " + inchesToMeters(hundredInches) + " meters and converts back to " + metersToInches(inchesToMeters(hundredInches)) + " inches.");
      }
  
      private BigDecimal metersToInches(BigDecimal meters) {
          return meters.multiply(new BigDecimal("39.3701").setScale(SCALE, BigDecimal.ROUND_HALF_UP));
      }
  
      private BigDecimal inchesToMeters(BigDecimal inches) {
          return inches.multiply(new BigDecimal("0.0254").setScale(SCALE, BigDecimal.ROUND_HALF_UP));
      }
  
      private BigDecimal kilosToPounds(BigDecimal kilos) {
          return kilos.multiply(new BigDecimal("2.20462").setScale(SCALE, BigDecimal.ROUND_HALF_UP));
      }
  
      private BigDecimal poundsToKilos(BigDecimal pounds) {
          return pounds.multiply(new BigDecimal("0.45359").setScale(SCALE, BigDecimal.ROUND_HALF_UP));
      }
  }
  </code></pre>
  
  <p>When it runs it prints out:</p>
  
  <pre><code>100 pounds is 45.00 kilos and converts back to 99.0000 pounds.
  100 inches is 3.00 meters and converts back to 118.1100 inches.
  </code></pre>
  
  <p>Whereas I was <em>expecting</em> it to print out:</p>
  
  <pre><code>100.00 pounds is 45.00 kilos and converts back to 100.00 pounds.
  100.00 inches is 3.00 meters and converts back to 100.00 inches.
  </code></pre>
  
  <p>All I care about is that Imperial&lt;->Metric conversion is accurate up to 2 decimal places and that the final outputs are always accurate up to 2 decimal places. <strong>Can anyone see where I'm going awry and what the fix is?</strong></p>