DecimalFormat的用法介绍 java decimalformat

import java.text.*;
import java.util.*;

public class DecimalFormatSample {
public static void main(String args[]) {
DecimalFormat myformat1 = newDecimalFormat("###,###.0000");//使用系统默认的格式
System.out.println(myformat1.format(111111123456.12));

Locale.setDefault(Locale.US);
DecimalFormat myformat2 = newDecimalFormat("###,###.0000");//使用美国的格式
System.out.println(myformat2.format(111111123456.12));

//----------------------------also useapplypattern------------------------------//

DecimalFormat myformat3 =new DecimalFormat();
myformat3.applyPattern("##,###.000");
System.out.println(myformat3.format(11112345.12345));
//-----------------控制指数输出-------------------------------------------------//

DecimalFormat myformat4 = new DecimalFormat();
myformat4.applyPattern("0.000E0000");
System.out.println(myformat4.format(10000));
System.out.println(myformat4.format(12345678.345));
//------------------百分数的输出-------------------------------------------//

DecimalFormat myformat5 = null;
try{
myformat5 = (DecimalFormat)NumberFormat.getPercentInstance();
}catch(ClassCastExceptione)
{
System.err.println(e);
}
myformat5.applyPattern("00.0000%");
System.out.println(myformat5.format(0.34567));
System.out.println(myformat5.format(1.34567));



}

}

==============================================================================

DecimalFormatNumberFormat的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够分析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数(123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额($123)。所有这些内容都可以本地化。

要获取具体语言环境的 NumberFormat(包括默认语言环境),可调用 NumberFormat 的某个工厂方法,如 getInstance()。通常不直接调用 DecimalFormat 的构造方法,因为 NumberFormat 的工厂方法可能返回不同于 DecimalFormat 的子类。如果需要自定义格式对象,可执行:

NumberFormat f = NumberFormat.getInstance(loc); if (f instanceof DecimalFormat) {     ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true); }

DecimalFormat包含一个模式 和一组符号。可直接使用 applyPattern() 或间接使用 API 方法来设置模式。符号存储在DecimalFormatSymbols 对象中。使用NumberFormat 工厂方法时,可从已本地化的ResourceBundle 中读取模式和符号。

模式

DecimalFormat 模式具有下列语法:

模式:正数模式正数模式负数模式正数模式:前缀opt 数字后缀opt负数模式:前缀opt 数字后缀opt前缀:除 uFFFE、uFFFF 和特殊字符以外的所有 Unicode 字符后缀:除 uFFFE、uFFFF 和特殊字符以外的所有 Unicode 字符数字:整数指数opt整数小数指数opt整数:最小整数         ## 整数# , 整数最小整数:         00 最小整数0 , 最小整数小数:最小小数opt 可选小数opt最小小数:0 最小小数opt可选小数:# 可选小数opt指数:E 最小指数最小指数:0 最小指数opt

DecimalFormat模式包含正数和负数子模式,例如 "#,##0.00;(#,##0.00)"。每个子模式都有前缀、数字部分和后缀。负数子模式是可选的;如果存在,则将用已本地化的减号(在多数语言环境中是'-')作为前缀的正数子模式用作负数子模式。也就是说,单独的"0.00" 等效于 "0.00;-0.00"。如果存在显式的负数子模式,则它仅指定负数前缀和后缀;数字位数、最小位数,其他特征都与正数模式相同。这意味着"#,##0.0#;(#)" 的行为与"#,##0.0#;(#,##0.0#)"完全相同。

用于无穷大值、数字、千位分隔符、小数分隔符等的前缀、后缀和各种符号可设置为任意值,并且能在格式化期间正确显示。但是,必须注意不要让符号和字符串发生冲突,否则分析是不可靠的。例如,为了让DecimalFormat.parse()能够区分正数和负数,正数和负数前缀或后缀必须是不同的。(如果它们相同,则 DecimalFormat的行为就如同未指定负数子模式一样。)另一个示例是小数分隔符和千位分隔符应该是不同的字符,否则将不可能进行分析。

分组分隔符通常用于千位,但是在某些国家中它用于分隔万位。分组大小是分组字符之间的固定数字位数,例如 100,000,000 是3,而 1,0000,0000 则是 4。如果使用具有多个分组字符的模式,则最后一个分隔符和整数结尾之间的间隔才是使用的分组大小。所以"#,##,###,####" =="######,####" =="##,####,####"

特殊模式字符

模式中的很多字符都是按字面解释的;在分析期间对其进行匹配,在格式化期间则不经改变地输出。另一方面,特殊字符代表了其他字符、字符串或字符类。如果要将其作为字面量出现在前缀或后缀中,那么除非另行说明,否则必须对其加引号。

下列字符用在非本地化的模式中。已本地化的模式使用从此 formatter 的 DecimalFormatSymbols对象中获得的相应字符,这些字符已失去其特殊状态。两种例外是货币符号和引号,不将其本地化。

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

科学计数法

科学计数法中的数表示为一个尾数和一个 10 的几次幂的乘积,例如可将 1234 表示为 1.234 x10^3。尾数的范围通常是 1.0 <= x <10.0,但并非必需如此。可指示 DecimalFormat仅通过某个模式来格式化和分析科学计数法表示的数;目前没有创建科学计数法格式的工厂方法。在这个模式中,指数字符后面紧跟着一个或多个数字字符即指示科学计数法。示例:"0.###E0"将数字 1234 格式化为 "1.234E3"

  • 尾数中的有效位数是最小整数最大小数 位数的和,不受最大整数位数的影响。例如,使用"##0.##E0" 格式化 12345 得到"12.3E3"。要显示所有位数,请将有效位数计数设置为零。有效位数不会影响分析。
  • 指数模式可能不包含分组分隔符。
  • 舍入

    DecimalFormat 使用 half-even舍入(请参阅 ROUND_HALF_EVEN)进行格式化。

    阿拉伯数字

    为了进行格式化,DecimalFormat 使用DecimalFormatSymbols对象中所定义的、从已本地化的阿拉伯数字 0 开始的 10 个连续字符作为阿拉伯数字。为了进行分析,可识别 Character.digit所定义的这些阿拉伯数字和所有 Unicode 十进制阿拉伯数字。

    特殊值

    NaN 被格式化为单个字符,通常是uFFFD。此字符由 DecimalFormatSymbols 对象所确定。这是惟一不使用前缀和后缀的值。

    无穷大的值被格式化为单个字符,通常是 u221E,具有正数或负数前缀和后缀。无穷大值的字符由 DecimalFormatSymbols 对象所确定。

    将负零("-0")分析为

    同步

    DecimalFormat通常不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问某个格式,则必须保持外部同步。

    示例

    // Print out a number using the localized number, integer, currency, // and percent format for each locale Locale[] locales = NumberFormat.getAvailableLocales(); double myNumber = -1234.56; NumberFormat form; for (int j=0; j<4; ++j) {     System.out.println("FORMAT");     for (int i = 0; i < locales.length; ++i) {         if (locales[i].getCountry().length() == 0) {            continue; // Skip language-only locales         }         System.out.print(locales[i].getDisplayName());         switch (j) {         case 0:             form = NumberFormat.getInstance(locales[i]); break;         case 1:             form = NumberFormat.getIntegerInstance(locales[i]); break;         case 2:             form = NumberFormat.getCurrencyInstance(locales[i]); break;default:             form = NumberFormat.getPercentInstance(locales[i]); break;         }         if (form instanceof DecimalFormat) {             System.out.print(": " + ((DecimalFormat) form).toPattern());         }         System.out.print(" -> " + form.format(myNumber));         try {             System.out.println(" -> " + form.parse(form.format(myNumber)));} catch (ParseException e) {}     } }
    =========================================分割线=========================================
     
    例子 :
    import java.text.*;
    public class Untitled1 {
    public static void main(String[] args) {
    //---------------------------------------------
    //定义一个数字格式化对象,格式化模板为".##",即保留2位小数.
    DecimalFormat a = new DecimalFormat(".##");
    String s= a.format(333.335);
    System.err.println(s);
    //说明:如果小数点后面不够2位小数,不会补零.参见Rounding小节
    //---------------------------------------------
    //-----------------------------------------------
    //可以在运行时刻用函数applyPattern(String)修改格式模板
    //保留2位小数,如果小数点后面不够2位小数会补零
    a.applyPattern(".00");
    s = a.format(333.3);
    System.err.println(s);
    //------------------------------------------------
    //------------------------------------------------
    //添加千分号
    a.applyPattern(".##u2030");
    s = a.format(0.78934);
    System.err.println(s);//添加千位符后,小数会进三位并加上千位符
    //------------------------------------------------
    //------------------------------------------------
    //添加百分号
    a.applyPattern("#.##%");
    s = a.format(0.78645);
    System.err.println(s);
    //------------------------------------------------
    //------------------------------------------------
    //添加前、后修饰字符串,记得要用单引号括起来
    a.applyPattern("'这是我的钱$',###.###'美圆'");
    s = a.format(33333443.3333);
    System.err.println(s);
    //------------------------------------------------
    //------------------------------------------------
    //添加货币表示符号(不同的国家,添加的符号不一样
    a.applyPattern("u00A4");
    s = a.format(34);
    System.err.println(s);
    //------------------------------------------------
    //-----------------------------------------------
    //定义正负数模板,记得要用分号隔开
    a.applyPattern("0.0;'@'-#.0");
    s = a.format(33);
    System.err.println(s);
    s = a.format(-33);
    DecimalFormat的用法介绍 java decimalformat
    System.err.println(s);
    //-----------------------------------------------

    //综合运用,正负数的不同前后缀
    String pattern="'my moneny'###,###.##'RMB';'ur money'###,###.##'US'";
    a.applyPattern(pattern);
    System.out.println(a.format(1223233.456));
    }
    }
    总结:
    要生成一个DecimalFormat对象,一般只要通过NumberFormat类工厂的getInstance()来取得一个NumberFormat对象再将其转换成DecimalFormat对象,然后通过DecimalForat对象的applyPattern()来动态改变数据的现示格式模板,通过format()方法取得格式化后的数字。同时,DecimalFormat提供了许多的方法来返回格式化后的数字的某一部份,这些方法如:getNegativeSuffix()。这个类的难点主要是在模板的书写及理解上。其实主要的就是针对一个数字的正负形式来设定不同的格式显示。这里要特别注意的是使用在模板上的特殊字符代表有特殊的意义,如下表所示:
    Symbol Description
    0 a digit
    # a digit, zero shows as absent
    . placeholder for decimal separator
    , placeholder for grouping separator
    E separates mantissa and exponent for exponential formats
    ; separates formats
    - default negative prefix
    % multiply by 100 and show as percentage
    ? multiply by 1000 and show as per mille
    ¤ currency sign; replaced by currency symbol; if doubled, replaced by international currency symbol; if present in a pattern, the monetary decimal separator is used instead of the decimal separator
    X any other characters can be used in the prefix or suffix
    ' used to quote special characters in a prefix or suffix
    例如:如果模板中含有#,意思是指这个#号可代表一个或多个数字如果该位的数字是零的话则省略该位。另:注意“#,##0.0#;(#)”这个模板的意思是指数字的负数形式跟正数的一样

      

    爱华网本文地址 » http://www.413yy.cn/a/25101015/272319.html

    更多阅读

    的地得的用法 的和地的区别及用法

    的地得的用法——简介日常工作中,常会有人提到“的”“地”“得”用法的问题,不少学生对“的、地、得”用法也是含糊不清,乱用一气,作业自然会在“的”“地”“得”用法上出错,并且屡改屡犯。大家都知道,“的”、“地”、“得”这三个字的

    护发素的用法 护发素发膜的正确用法

    护发素的用法——简介护发素可以为头发提供一层保护,或许就因此得名了吧。比起洗发用品,护发素能够令头发看起来更自然和健康。 下面来介绍一下护发素的用法供参考。 护发素的用法——工具/原料护发素护发素的用法——方法/步骤护发

    excel公式函数详解:19 yearfrac函数用法介绍

    excel公式函数详解:[19]yearfrac函数用法介绍——简介一个良好的规划对于生活品质和工作效率都极其重要,在实际生活中我们往往需要计算一年有几个项目,每个项目需要花费多长时间。不同的工作其所花的中心也应该不一样。在excel中有一个

    转 centos6.4下vi的用法大全 centos 6.4 iso下载

    【转】:http://blog.csdn.net/xst686/article/details/9833303vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,v

    声明:《DecimalFormat的用法介绍 java decimalformat》为网友天上无星哦分享!如侵犯到您的合法权益请联系我们删除