开发者

How to save decimal in java

Having the fol开发者_StackOverflow中文版lowing 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?


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.


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));


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


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


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)));


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


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜