如何在java中保存十进制

时间:2010-07-02 19:28:50

标签: java math

在Java中使用以下代码:

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

结果: 0.0

我想要的是保存此操作的前4个十进制数字(0.6180)。你知道我该怎么办?

7 个答案:

答案 0 :(得分:16)

使用表达式初始化变量,该表达式的计算结果为double而不是int:

double operation = 890.0 / 1440.0;

否则表达式使用整数运算(最终截断结果)完成。然后,截断的结果将转换为double

答案 1 :(得分:10)

您可以使用双重文字d - 否则您的数字会被视为int类型:

double operation = 890d / 1440d;

然后您可以使用NumberFormat指定位数。

例如:

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

答案 2 :(得分:5)

您也可以这样做:

double result = (double) 890 / 1400;

打印以下内容:

  

0.6180555555555556

您可以查看如何对数字here

进行舍入

答案 3 :(得分:3)

这是使用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));
        }
    }

输出

操作:0.6180555555555556 缩放:0.6181

答案 4 :(得分:2)

BigDecimal虽然非常笨拙,但提供了一些格式化选项:

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

如果你真的想要舍入到前4个小数位,你也可以先使用第一个数字乘以整数运算,这样它的数字就会向右移动f位置到左边:

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

我在这里使用很长时间以避免任何溢出,以防临时结果不适合32位。