zoukankan      html  css  js  c++  java
  • java输出格式

    //保留小数点后两位小数

    View Code
    1 public double Number2(double pDouble) 
    2
    3 { BigDecimal bd=new BigDecimal(pDouble); BigDecimal bd1=bd.setScale(2,bd.ROUND_HALF_UP); pDouble=bd1.doubleValue(); long ll = Double.doubleToLongBits(pDouble); return pDouble; }

    有时我们需要控制输出的数字的格式,如何使用java的类库做到这个呢? 也许你不关心格式,但是你需要关心你的程序可以在全世界通用,像下面的这样一个简单的语句是依赖地区的: System.out.println(1234.56); 在美国,"." 是小数点,但在其它地方就不一定了。如何处理这个呢?
    java.text 包中的一些包可以处理这类问题。下面的简单范例使用那些类解决上面提出的问题:
    import java.text.NumberFormat;
        import java.util.Locale;
        public class DecimalFormat1 {
            public static void main(String args[]) {
                // 得到本地的缺省格式
    NumberFormat nf1 = NumberFormat.getInstance();
                System.out.println(nf1.format(1234.56));
                // 得到德国的格式
    NumberFormat nf2 =
                    NumberFormat.getInstance(Locale.GERMAN);
                System.out.println(nf2.format(1234.56));
            }
        }
    如果你在美国,运行程序后输出:
    1,234.56
        1.234,56
    换句话说,在不同的地方使用不同的习惯表示数字。
    NumberFormat.getInstance()方法返回NumberFormat的一个实例(实际上是NumberFormat具体的一个子类,例如DecimalFormat), 这适合根据本地设置格式化一个数字。你也可以使用非缺省的地区设置,例如德国。然后格式化方法根据特定的地区规则格式化数字。这个程序也可以使用一个简单的形式:
    NumberFormat.getInstance().format(1234.56)
    但是保存一个格式然后重用更加有效。国际化是格式化数字时的一个大问题。
    另一个是对格式的有效控制,例如指定小数部分的位数,下面是解决这个问题的一个简单例子:
    import java.text.DecimalFormat;
        import java.util.Locale;
        public class DecimalFormat2 {
            public static void main(String args[]) {
                // 得到本地的缺省格式
    DecimalFormat df1 = new DecimalFormat("####.000");
                System.out.println(df1.format(1234.56));
                // 得到德国的格式
    Locale.setDefault(Locale.GERMAN);
                DecimalFormat df2 = new DecimalFormat("####.000");
                System.out.println(df2.format(1234.56));
            }
        }
    在这个例子中设置了数字的格式,使用像"####.000"的符号。这个模式意味着在小数点前有四个数字,如果不够就空着,小数点后有三位数字,不足用0补齐。程序的输出:
    1234.560
        1234,560
    相似的,也可以控制指数形式的格式,例如:
    import java.text.DecimalFormat;
        public class DecimalFormat3 {

    public static void main(String args[]) {
                DecimalFormat df = new DecimalFormat("0.000E0000");
                System.out.println(df.format(1234.56));
            }
        }
    输出:
    1.235E0003
    对于百分数:
    import java.text.NumberFormat;
        public class DecimalFormat4 {
            public static void main(String args[]) {
    NumberFormat nf = NumberFormat.getPercentInstance();
                System.out.println(nf.format(0.47));
            }
        }
    输出:
    47%
    至此,你已经看到了格式化数字的几个不同的技术。另一方面,如何读取并解析包含格式化的数字的字符串?解析支持包含在NumberFormat中。例如:
    import java.util.Locale;
        import java.text.NumberFormat;
        import java.text.ParseException;
        public class DecimalFormat5 {
            public static void main(String args[]) {
                // 本地格式
    NumberFormat nf1 = NumberFormat.getInstance();

     


                Object obj1 = null;
                // 基于格式的解析
    try {
                    obj1 = nf1.parse("1234,56");
                }
                catch (ParseException e1) {
                    System.err.println(e1);
                }
                System.out.println(obj1);
                // 德国格式
    NumberFormat nf2 =
                    NumberFormat.getInstance(Locale.GERMAN);
                Object obj2 = null;
                // 基于格式的解析
    try {
                    obj2 = nf2.parse("1234,56");
                }
                catch (ParseException e2) {
                    System.err.println(e2);
                }
                System.out.println(obj2);
            }
        }
    这个例子分两部分,都是解析一个字符串:"1234,56"。第一部分使用本地格式解析,第二部分使用德国格式解析。当程序在美国运行,结果是:
    123456
        1234.56
    换句话说,"1234,56"在美国被认为是一个巨大的整数"123456"而在德国被认为是一个小数"1234.56"。

     


    还有格式化讨论的最后一个问题。在上面的例子中, DecimalFormat 和 NumberFormat 都被使用了。DecimalFormat 常用于获得很好的格式控制,而NumberFormat 常用于指定不同于本地的地区。如何结合两个类呢?
    答案围绕着这样的事实:DecimalFormat是NumberFormat的一个子类,其实例被指定为特定的地区。因此,你可以使用NumberFormat.getInstance 指定一个地区,然后将结构强制转换为一个DecimalFormat对象。文档中提到这个技术可以在大多情况下适用,但是你需要用try/catch 块包围强制转换以防转换不能正常工作 (大概在非常不明显得情况下使用一个奇异的地区)。下面是一个这样的例子:
    import java.text.DecimalFormat;
        import java.text.NumberFormat;
        import java.util.Locale;
        public class DecimalFormat6 {
            public static void main(String args[]) {
                DecimalFormat df = null;
                // 得到一个NumberFormat 对象并
    // 强制转换为一个 DecimalFormat 对象

    try {
                    df = (DecimalFormat)
                        NumberFormat.getInstance(Locale.GERMAN);
                }
                catch (ClassCastException e) {
                    System.err.println(e);
                }
                // 设置格式模式
    df.applyPattern("####.00000");
                // format a number
                System.out.println(df.format(1234.56));
            }     }
    getInstance() 方法获得格式,然后调用applyPattern()方法设置格式模式,输出:
    1234,56000
    如果你不关心国际化,可以直接使用DecimalFormat 。                             

    /************************************************************************************/

    上面是转载别人的内容,下面是用DecimalFormat:

    View Code
    1 double d = 12.3;
    2 DecimalFormat df = new DecimalFormat(#0.00);
    3 System.out.println(df.format(d));
    4 结果为12.30

     下面的代码就更说明问题了,至少解决是否留零问题:

    代码:

    View Code
     1 import java.text.DecimalFormat;
    2
    3 public class test{
    4 public static void main(String args[]){
    5 double d = 12345.67;
    6 DecimalFormat df1 = new DecimalFormat();
    7 DecimalFormat df2 = new DecimalFormat("###,###.0000");
    8 DecimalFormat df3 = new DecimalFormat("000,000.####");
    9 System.out.println(df1.format(d));
    10 System.out.println(df2.format(d));
    11 System.out.println(df3.format(d));
    12 }
    13 }

    运行 结果:

    12,345.67

    12,345.6700

    012,345.67

  • 相关阅读:
    Java 简单算法--打印乘法口诀(只使用一次循环)
    Java简单算法--求100以内素数
    ubuntu 16.04 chrome flash player 过期
    java 网络API访问 web 站点
    java scoket (UDP通信模型)简易聊天室
    leetcode1105 Filling Bookcase Shelves
    leetcode1140 Stone Game II
    leetcode1186 Maximum Subarray Sum with One Deletion
    leetcode31 Next Permutation
    leetcode834 Sum of Distances in Tree
  • 原文地址:https://www.cnblogs.com/leewiki/p/2286258.html
Copyright © 2011-2022 走看看