如何将 2.5 变成 2.50 ?我查了一下jdk文档, 好像是使用BigDeciaml 这个类, 但是具体的没看懂。哪位知道的请帮忙回复一下,希望可以讲得详细一些, 谢谢!

解决方案 »

  1.   

    打印的话,System.out.printf("%.2f\n", 2.5);
      

  2.   


    不只是打印。 我就是想知道如果通过jdk中的自带的类将2.5变成2.50.  谢谢!
      

  3.   

    BigDeciaml 可以设置小数点后面的位数,可以重新定义舍和入的规则
    BigDecimal b = new BigDecimal(2.5);
         b =b.setScale(2);
      

  4.   

    同楼上,不过如果你直接把BigDecimal打印出来
    多余的0一样会被自动略去
    所以,不知道楼主这样做是为了什么用处
      

  5.   


    打印出来0不会被略去
    System.out.println(b);
    输出:2.50
    看下BigDecimal的toString方法
      

  6.   

    也可以这样
      String s=  String.format("%.2f", 2.5);
      System.out.println(s);
      

  7.   


    谢谢! 这个问题我明白了, 但是我现在又有另一个问题:

      double d1 = 0.05;
      System.out.println( "d1=" + d1 );
      double d2 = 0.005;
      System.out.println( "d2=" + d2 );
      double d3 = 0.0005;
      System.out.println( "d3=" + d3 );执行结果如下:
    d1=0.05
    d2=0.0050
    d3=5.0E-4谁能解释一下这段代码的执行结果?还有就是如果我现在想把0.0050 转换成 0.005, 我应该怎么做?谢谢大家!!

      

  8.   

    System.out.printf("%.3f",0.005000);
    System.out.println();String mybb = String.format("%.3f",0.005000);
    System.out.println( mybb );
    please 给分
      

  9.   

    System.out.println( "d3=" + d3 );
    调用了Double类的toString()方法toString
    public static String toString(double d)返回 double 参数的字符串表示形式。下面提到的所有字符都是 ASCII 字符。 
    如果参数为 NaN,则结果是字符串 "NaN"。 
    否则,结果是表示参数的符号和大小(绝对值)的字符串。如果符号为负,则结果的第一个字符是 '-' ('\u002D');如果符号为正,则结果中不显示符号字符。至于大小值 m: 
    如果 m 为无穷大,则用字符 "Infinity" 表示它;因此,正无穷大产生的结果就是 "Infinity",而负无穷大产生的结果是 "-Infinity"。 
    如果 m 为零,则用字符 "0.0" 表示它;因此,负零产生的结果是 "-0.0",而正零产生的结果是 "0.0"。 
    如果 m 大于或者等于 10-3,但小于 107,则采用不带前导零的十进制形式,用 m 的整数部分表示它,后面跟着 '.' ('\u002E'),再后面是表示 m 的小数部分的一个或多个十进制位数。 
    如果 m 小于 10-3 或者大于或等于 107,则用所谓的“计算机科学记数法”表示它。让 n 成为满足 10n <= m < 10n+1 的惟一整数;然后让 a 成为 m 的精确算术商数值,并用 10n 这种形式表示它,因此,1 <= a < 10。然后,用 a 的整数部分表示大小值,它的表示形式为:一个十进制位数,后面跟着 '.' ('_apos;),接着是表示 a 的小数部分的十进制位数,再后面是字母 'E' ('-pos;),最后是用十进制整数形式表示的 n,这与通过方法 Integer.toString(int) 产生的结果非常相似。 
    必须为 m 或 a 的小数部分显示多少位呢?至少必须有一位数来表示小数部分,除此之外,需要很多(但只能和需要的一样多)位数来惟一地区别参数值和 double 类型的邻近值。换句话说,假设 x 是用十进制表示法表示的精确算术值,是通过用于有限非零参数 d 的方法生成的。那么 d 必须是最接近 x 的 double 值;如果两个 double 值都同样接近 x,那么 d 必须是其中之一,并且 d 的最低有效位必须是 0。 再读了这个你就清楚了
      

  10.   

    这个我觉得用DecimalFormat类可以来解决,你可以查看它的源代码
      

  11.   

    内存中存的都是一样,就是表现形式(打印、显示在屏幕中)不同而已,还得用format