Tutorial :How to save decimal in java



Question:

Having the following code in Java:

double operation = 890 / 1440;    System.out.println(operation);    

Result: 0.0

What I want is to save the first 4 decimal digits of this operation (0.6180). Do you know how can I do it?


Solution:1

Initialize your variable with an expression that evaluates to a double rather than an int:

double operation = 890.0 / 1440.0;  

Otherwise the expression is done using integer arithmetic (which ends up truncating the result). That truncated result then gets converted to a double.


Solution:2

You can use the double literal d - otherwise your numbers are considered of type int:

double operation = 890d / 1440d;  

Then you can use a NumberFormat to specify the number of digits.

For example:

NumberFormat format = new DecimalFormat("#.####");  System.out.println(format.format(operation));  


Solution:3

You can also do something like this:

double result = (double) 890 / 1400;  

which prints the following:

0.6180555555555556

You can check how to round up the number here


Solution:4

This is done using BigDecimal

   import java.math.BigDecimal;  import java.math.RoundingMode;          public class DecimalTest {            /**           * @param args           */          public static void main(String[] args) {              double operation = 890.0 / 1440.0;              BigDecimal big = new BigDecimal(operation);                   big = big.setScale(4, RoundingMode.HALF_UP);                      double d2 = big.doubleValue();              System.out.println(String.format("operation : %s", operation));              System.out.println(String.format("scaled : %s", d2));          }      }  

Output

operation : 0.6180555555555556 scaled : 0.6181


Solution:5

BigDecimal, although very clumsy to work with, gives some formatting options:

    BigDecimal first = new BigDecimal(890);      BigDecimal second = new BigDecimal(1440);      System.out.println(first.divide(second, new MathContext(4, RoundingMode.HALF_EVEN)));  


Solution:6

double operation = 890.0 / 1440;  System.out.printf(".4f\n", operation);  


Solution:7

If you really want to round to the first 4 fractional digits you can also use integer arithmetic by first multiplying the first number so its digits are shifted the right amount f places to the left:

long fractionalPart = 10000L * 890L / 1440L;  

I'm using long here to avoid any overflows in case the temporary result does not fit in 32 bits.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »