# 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 »