DecimalfFormat

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。
DecimalFormat 模式包含正数和负数子模式,例如 “#,##0.00;(#,##0.00)“。每个子模式都有前缀、数字部分和后缀。负数子模式是可选的;如果存在,则将用已本地化的减号(在多数语言环境中是 '-')作为前缀的正数子模式用作负数子模式。也就是说,单独的 “0.00” 等效于 “0.00;-0.00”。如果存在显式的负数子模式,则它仅指定负数前缀和后缀;数字位数、最小位数,其他特征都与正数模式相同。
用于无穷大值、数字、千位分隔符、小数分隔符等的前缀、后缀和各种符号可设置为任意值,并且能在格式化期间正确显示。但是,必须注意不要让符号和字符串发生冲突,否则分析是不可靠的。例如,为了让 DecimalFormat.parse() 能够区分正数和负数,正数和负数前缀或后缀必须是不同的。(如果它们相同,则 DecimalFormat 的行为就如同未指定负数子模式一样。)另一个示例是小数分隔符和千位分隔符应该是不同的字符,否则将不可能进行分析。
科学计数法
科学计数法中的数表示为一个尾数和一个 10 的几次幂的乘积,例如可将 1234 表示为 1.234 x 10^3。尾数的范围通常是 1.0 <= x < 10.0,但并非必需如此。可指示 DecimalFormat 仅通过某个模式 来格式化和分析科学计数法表示的数;目前没有创建科学计数法格式的工厂方法。在这个模式中,指数字符后面紧跟着一个或多个数字字符即指示科学计数法。示例:“0.###E0” 将数字 1234 格式化为 “1.234E3”。

指数字符后面的数字位数字符数给出了最小的指数位数。没有最大值。使用本地化的减号来格式化负数指数,不 使用模式中的前缀和后缀。这就允许存在诸如 “0.###E0 m/s” 等此类的模式。
最小和最大整数数字位数一起进行解释:
如果最大整数数字位数大于其最小整数数字位数并且大于 1,则强制要求指数为最大整数数字位数的倍数,并将最小整数数字位数解释为 1。最常见的用法是生成工程计数法,其中指数是 3 的倍数,如 “##0.#####E0”。使用此模式时,数 12345 格式化为 “12.345E3”,123456 则格式化为 “123.456E3”。
否则通过调整指数来得到最小整数数字位数。示例:使用 “00.###E0” 格式化 0.00123 时得到 “12.3E-4”。
尾数中的有效位数是最小整数 和最大小数 位数的和,不受最大整数位数的影响。例如,使用 “##0.##E0” 格式化 12345 得到 “12.3E3”。要显示所有位数,请将有效位数计数设置为零。有效位数不会影响分析。
指数模式可能不包含分组分隔符。

符号 位置 本地化? 含义
0 数字 是 阿拉伯数字

数字字 是 阿拉伯数字,如果不存在则显示为 0

. 数字 是 小数分隔符或货币小数分隔符

  • 数字 是 减号
    , 数字 是 分组分隔符
    E 数字 是 分隔科学计数法中的尾数和指数。在前缀或后缀中无需加引号。
    ; 子模式边界 是 分隔正数和负数子模式
    % 前缀或后缀 是 乘以 100 并显示为百分数
    \u2030 前缀或后缀 是 乘以 1000 并显示为千分数
    ¤ (\u00A4) 前缀或后缀 否 货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。
    ' 前缀或后缀 否 用于在前缀或或后缀中为特殊字符加引号,例如 “'#'#” 将 123 格式化为 “#123”。要创建单引号本身,请连续使用两个单引号:“# o''clock”。

DecimalFormat df = new DecimalFormat();

           double data = 1234.56789;
           System.out.println("格式化之前的数字: " + data);
          String style = "0.0";//定义要显示的数字的格式
            df.applyPattern(style);// 将格式应用于格式化器
           System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
          style = "00000.000 kg";//在格式后添加诸如单位等字符
          df.applyPattern(style);
          System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
          // 模式中的"#"表示如果该位存在字符,则显示字符,如果不存在,则不显示。
          style = "##000.000 kg";
          df.applyPattern(style);
          System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
          // 模式中的"-"表示输出为负数,要放在最前面
          style = "-000.000";
           df.applyPattern(style);
         System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
           // 模式中的","在数字中添加逗号,方便读数字
          style = "-0,000.0#";
           df.applyPattern(style);
         System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
          // 模式中的"E"表示输出为指数,"E"之前的字符串是底数的格式,
           // "E"之后的是字符串是指数的格式
          style = "0.00E000";
       df.applyPattern(style);
         System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
      // 模式中的"%"表示乘以100并显示为百分数,要放在最后。
     style = "0.00%";
         df.applyPattern(style);
      System.out.println("采用style: " + style + "格式化之后: " + df.format(data));
    // 模式中的"\u2030"表示乘以1000并显示为千分数,要放在最后。
        style = "0.00\u2030";
         //在构造函数中设置数字格式
        DecimalFormat df1 = new DecimalFormat(style);
        //df.applyPattern(style);
        System.out.println("采用style: " + style + "格式化之后: " + df1.format(data));

涉及到设置小数点格式问题时,尽量少用float,常因精度问题导致不不要的错误;尽量用double精度高于float,也是默认类型。
.format(double value)是将 格式化一个 double 值,以生成一个字符串。如果想将只在便会double还需要调用Double.parseDouble()方法将字符串转换成double类型数据。
Double.parseDouble()和Double.valueOf()都可应将String行数据转换成浮点型,但是前者返回的是double数据类型,后者返回的是Double类的对象。
java中无法将String类型数据强制转换成double型,(Double)String无法编译通过。

你可能感兴趣的:(格式化,DecimalfFormat,parseDouble())