如何将double值舍入为2个小数点?

时间:2011-05-10 06:04:17

标签: java

  

可能重复:
  round double to two decimal places in java

我想将双值向上舍入到2个小数点。

例如:我有双d = 2;结果应为result = 2.00

8 个答案:

答案 0 :(得分:55)

Math.round(number*100.0)/100.0;

答案 1 :(得分:33)

double RoundTo2Decimals(double val) {
            DecimalFormat df2 = new DecimalFormat("###.##");
        return Double.valueOf(df2.format(val));
}

答案 2 :(得分:29)

2和2.00之间的内部表示没有区别。您可以使用Math.round将值舍入到最接近的整数 - 将该轮舍入到2位小数,您可以乘以100,舍入,然后除以100,但您不应期望结果为<由于二进制浮点算法的性质,em>完全 2dps。

如果您只对格式化一个小数点后两位的值感兴趣,请查看DecimalFormat - 如果您在计算时感兴趣于多个小数位 / em>你应该真的使用BigDecimal。这样你就会知道你真的在处理十进制数字,而不是“最近的double值”。

如果您始终处理两位小数,您可能需要考虑的另一个选项是将值存储为longBigInteger,因为它知道它正是例如,“实际”值的100倍 - 有效地存储美分而不是美元。

答案 3 :(得分:13)

import java.text.DecimalFormat;

public class RoundTest {
    public static void main(String[] args) {
        double i = 2;    
        DecimalFormat twoDForm = new DecimalFormat("#.00");
        System.out.println(twoDForm.format(i));
        double j=3.1;
        System.out.println(twoDForm.format(j));
        double k=4.144456;
        System.out.println(twoDForm.format(k));
    }
}

答案 4 :(得分:12)

我猜你需要一个格式化的输出。

System.out.printf("%.2f",d);

答案 5 :(得分:10)

您也可以使用此代码

public static double roundToDecimals(double d, int c)  
{   
   int temp = (int)(d * Math.pow(10 , c));  
   return ((double)temp)/Math.pow(10 , c);  
}

它可以控制需要点数后的数量。

d = number to round;   
c = number of decimal places  

认为这会有所帮助

答案 6 :(得分:5)

这样做。

     public static void main(String[] args) {
        double d = 12.349678;
        int r = (int) Math.round(d*100);
        double f = r / 100.0;
       System.out.println(f);
     }

你可以缩短这个方法,很容易理解这就是为什么我这样写的。

答案 7 :(得分:3)

public static double addDoubles(double a, double b) {
        BigDecimal A = new BigDecimal(a + "");
        BigDecimal B = new BigDecimal(b + "");
        return A.add(B).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    }