Search code examples
javaformatjava-5

truncate a Float in java 1.5 excluding setRoundingMode


I want to truncate a float value in Java.

Following are my requirements:

  1. if i have 12.49688f, it should be printed as 12.49 without rounding off
  2. if it is 12.456 in double, it should be printed as 12.45 without rounding off
  3. In any case if the value is like 12.0, it should be printed as 12 only.

Condition 3 is to be always kept in mind.It should be concurrent with truncating logic.

P.S: I am using Java 1.5 . So i know how to do it in Java 1.6 i.e using Decimal Format and calling setroundingMode () Method. I need to know for Java 1.5


Solution

  • Multiply, use Math#floor and divide before providing the number to the DecimalFormat. This is the same as cutoff roundig.

    // Replace N with the desired number of decimals after the comma
    number = Math.floor(1eN * number) / 1eN
    

    This isn't perfect because of rounding errors in floating point calculation, so you will still have to specify N decimals to the DecimalFormat.

     

    A (more expensive, but also more logical) alternative is to use a BigDecimal.

    // Given as seperate statements for clarity, but these can be combined into a single line
    // Replace "N" with the number of decimals after the comma
    MathContext NDecimals = new MathContext(N, RoundingMode.FLOOR);
    BigDecimal bdNumber = new BigDecimal(number, NDecimals);
    number = bdNumber.doubleValue();