【问题标题】:How to round the double value to 2 decimal points? [duplicate]如何将双精度值四舍五入到小数点后 2 位? [复制]
【发布时间】:2011-05-10 06:04:16
【问题描述】:

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

我想将双精度值四舍五入到小数点后 2 位。

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

【问题讨论】:

标签: java


【解决方案1】:
Math.round(number*100.0)/100.0;

【讨论】:

  • 又好又甜。无需用户 DecimalFormat。此解决方案在关键环境下表现出更好的性能。
  • 很好的解决方案,它避免了对 DecimalFomat 的库调用!我认为它也更快。
  • 试试 33.605。当您乘以 100.0 时,您会得到 3360.4999999999995,它会四舍五入到 33.60,而不是应该的 33.61。
  • 最佳解决方案,因为它不需要任何花哨的东西,例如外部库、格式化程序对象等。
【解决方案2】:
double RoundTo2Decimals(double val) {
            DecimalFormat df2 = new DecimalFormat("###.##");
        return Double.valueOf(df2.format(val));
}

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • @Rakesh:你只是想显示值吗?如果是这样,那很好......但请注意,例如,您最后一个示例中的k 不会完全 4.144456 开始。如果精确的十进制值对您很重要,您不应该使用double
    • @Jon Skeet,但 BigDecimal 的简单用法有时与 MsExcell (3,6,9) int decimalPlace = 0; BigDecimal bd = new BigDecimal(someDoubleNumber); bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);987654331@的输出不对应
    • @JonSkeet:当我们不应该使用 double 时,有什么意义?
    • @Amitabh:我在哪里说过你不应该在任何情况下使用double?我说的是精确十进制值很重要的情况——尤其是货币等“人造”值。 double 适用于自然构造,例如身高、体重等。
    • 最好使用提供解决方案的实际静态方法
    【解决方案4】:
    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));
        }
    }
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 此代码仅用于显示如何存储。
      • 字符串格式化 = String.format("%.2f",d);
      【解决方案6】:

      你也可以使用这个代码

      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  
      

      觉得会有帮助

      【讨论】:

        【解决方案7】:

        这样就可以了。

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

        这个方法可以简写,很容易理解,所以写成这样。

        【讨论】:

        • 这往往会导致浮点错误
        【解决方案8】:
        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();
            }
        

        【讨论】:

          猜你喜欢
          • 2013-08-14
          • 1970-01-01
          • 2012-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多