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

Rak*_*ani 34 java

可能重复:
在java中将double加倍到两位小数

我想将double值向上舍入到2个小数点.

例如:我有双d = 2; 结果应该是结果= 2.00

Jig*_*shi 57

Math.round(number*100.0)/100.0;
Run Code Online (Sandbox Code Playgroud)

  • 用 33.605 试试。当你乘以 100.0 时,你会得到 3360.4999999999995,它将四舍五入到 33.60 而不是 33.61,因为它应该。 (3认同)

Raz*_*aul 33

double RoundTo2Decimals(double val) {
            DecimalFormat df2 = new DecimalFormat("###.##");
        return Double.valueOf(df2.format(val));
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 29

内部表示在2和2.00之间没有区别.您可以使用Math.round将值舍入到最接近的整数 - 使该轮到2位小数,您可以乘以100,舍入,然后除以100,但是您不应该期望结果正好是 2dps,因为二进制浮点运算的本质.

如果你只关心格式的数值到小数点后两位,看DecimalFormat-如果你有兴趣的小数位数在计算你应该使用BigDecimal.这样你就会知道你真的在处理十进制数字,而不是"最接近的可用double值".

如果你总是处理两个小数位,你可能想要考虑的另一个选择是将值存储为long或者BigInteger,知道它正好是"实际"值的100倍 - 例如,有效地存储美分而不是美元.

  • @Rakesh:你只是想*显示*值吗?如果是这样,那很好......但要注意,例如,你的上一个例子中的`k`将不会*正好*4.144456开头.如果确切的十进制值对您很重要,则不应使用`double`. (2认同)
  • @ Jon Skeet,但BigDecimal的普通用法有时与MsExcell(3,6,9)`int decimalPlace = 0的输出无关; BigDecimal bd = new BigDecimal(someDoubleNumber); bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);` (2认同)

Rak*_*ani 14

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));
    }
}
Run Code Online (Sandbox Code Playgroud)


Pri*_*ley 12

我想你需要一个格式化的输出.

System.out.printf("%.2f",d);
Run Code Online (Sandbox Code Playgroud)

  • 此代码仅用于显示如何存储. (2认同)

avi*_*irk 11

你也可以使用这段代码

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

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

d = number to round;   
c = number of decimal places  
Run Code Online (Sandbox Code Playgroud)

认为这会有所帮助


Ank*_*kit 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);
     }
Run Code Online (Sandbox Code Playgroud)

你可以缩短这个方法,很容易理解这就是我写这样的原因.