- 浏览: 1356776 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (4)
- Struts1 (16)
- Spring (9)
- Hibernate (5)
- AJAX (16)
- MS Server (9)
- Oracle (35)
- 测试技术 (5)
- 其他 (37)
- JSF (1)
- EJB (5)
- ASP.NET (9)
- iBATIS (5)
- Struts Spring Hibernate (2)
- HTML (12)
- Eclipse使用 (5)
- 设计模式 (5)
- JSP (32)
- 正则表达式 (2)
- 服务器 (12)
- Java基础 (48)
- MySQL (4)
- 面试 (22)
- UML (1)
- 数据结构 (3)
- Ant (2)
- 规范 (4)
- JavaScript (29)
- 软件使用及技巧 (25)
- PHP (1)
- DWR (3)
- FreeMarker (1)
- ExtJs (17)
- JFreeChart (9)
- Reports (2)
- JavaException (1)
- Java Mail (1)
- Flex (9)
- 异常 (12)
- Log4j (2)
- WebService (1)
- jQuery (1)
- Sybase (2)
- myeclipse_plugin (2)
- Linux (5)
- jbpm (2)
- SCM (1)
- mongoDB (1)
最新评论
-
lihua2008love:
<typeAlias alias="User& ...
IBATIS简单操作 -
lihua2008love:
...
关于项目框架设计的一点学习 -
c_jinglin:
我使用<OBJECT CLASSID="cls ...
这就是个静态页面通过js控制mscomm对某com设备进行访问的例子. -
zlbjava:
赞,用了还不错
java获取请求的ip地址,并解析ip所属地区 -
完美天龙:
cs842813290 写道楼主,我明白的地方:在链表已有N个 ...
JAVA实现双向链表
import java.text.*; import java.util.*; public class DecimalFormatSample { public static void main(String args[]) { DecimalFormat myformat1 = new DecimalFormat("###,###.0000");//使用系统默认的格式 System.out.println(myformat1.format(111111123456.12)); Locale.setDefault(Locale.US); DecimalFormat myformat2 = new DecimalFormat("###,###.0000");//使用美国的格式 System.out.println(myformat2.format(111111123456.12)); //----------------------------also use applypattern------------------------------// 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是NumberFormat的一个子类,其实例被指定为特定的地区。因此,你可以使用NumberFormat.getInstance 指定一个地区, 然后将结构强制转换为一个DecimalFormat对象。文档中提到这个技术可以在大多情况下适用,但是你需要用try/catch 块包围强制转换以防转 换不能正常工作 (大概在非常不明显得情况下使用一个奇异的地区)。 */ DecimalFormat myformat5 = null; try{ myformat5 = (DecimalFormat)NumberFormat.getPercentInstance(); }catch(ClassCastException e) { System.err.println(e); } myformat5.applyPattern("00.0000%"); System.out.println(myformat5.format(0.34567)); System.out.println(myformat5.format(1.34567)); } /*---------------------------------运行结果-------------------------------------------// F:\2004-04-12>java DecimalFormatSample 111,111,123,456.1200 111,111,123,456.1200 11,112,345.123 1.000E0004 1.235E0007 34.5670% 134.5670% */ }==============================================================================
DecimalFormat
是 NumberFormat
的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够分析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (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 整数: 最小整数 # # 整数 # , 整数 最小整数: 0 0 最小整数 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 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"
。
- 如果最大整数数字位数大于其最小整数数字位数并且大于 1,则强制要求指数为最大整数数字位数的倍数,并将最小整数数字位数解释为 1。最常见的用法是生成工程计数法,其中指数是 3 的倍数,如
- 尾数中的有效位数是最小整数 和最大小数 位数的和,不受最大整数位数的影响。例如,使用
"##0.##E0"
格式化 12345 得到"12.3E3"
。要显示所有位数,请将有效位数计数设置为零。有效位数不会影响分析。 - 指数模式可能不包含分组分隔符。
舍入
DecimalFormat
使用 half-even 舍入(请参阅 ROUND_HALF_EVEN
)进行格式化。
阿拉伯数字
为了进行格式化,DecimalFormat
使用 DecimalFormatSymbols
对象中所定义的、从已本地化的阿拉伯数字 0 开始的 10 个连续字符作为阿拉伯数字。为了进行分析,可识别 Character.digit
所定义的这些阿拉伯数字和所有 Unicode 十进制阿拉伯数字。
特殊值
NaN
被格式化为单个字符,通常是 \uFFFD
。此字符由 DecimalFormatSymbols
对象所确定。这是惟一不使用前缀和后缀的值。
无穷大的值被格式化为单个字符,通常是 \u221E
,具有正数或负数前缀和后缀。无穷大值的字符由 DecimalFormatSymbols
对象所确定。
将负零("-0"
)分析为
- 如果
isParseBigDecimal()
为 true,则为BigDecimal(0)
, - 如果
isParseBigDecimal()
为 false 并且isParseIntegerOnly()
为 true,则为Long(0)
, - 如果
isParseBigDecimal()
和isParseIntegerOnly()
均为 false,则为Double(-0.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); 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#;(#)”这个模板的意思是指数字的负数形式跟正数的一样。
发表评论
-
项目中用到的数字证书的创建,签名实现
2012-07-15 20:17 2240首先 需要下载jar包 bcprov-jdk15-145.ja ... -
tomcat,jdk,maven环境变量配置(备忘)
2011-12-25 10:24 1434环境变量: CATALINA_HOME D:\P ... -
java获得指定时间几天前或几天后的日期
2010-01-14 09:28 8876/** * 得到几天前的时间 * * ... -
动态读取配置文件
2009-08-04 11:30 2513import java.io.File; import ja ... -
JAVA对数字证书的常用操作
2009-07-12 18:42 1455一需要包含的包 import java.security.* ... -
签字证书例子
2009-07-12 18:31 1641import java.io.FileInputStr ... -
list,set,map,数组间的相互转换
2009-07-01 16:10 29281.list转set Set set = new HashSe ... -
动态运行Java代码
2009-07-01 14:08 1440有些情况下,我们不得不动态运行Java代码,以便提供更加灵活的 ... -
防止java反编译的一些常用方法
2009-02-12 14:33 21211.隔离Java程序 最 ... -
操作数组
2009-01-20 12:48 1272List list1 = new ArrayList() ... -
java写入文件时庄和薛字的问题
2008-12-26 10:47 1509今天碰到一个很有意思的问题,当写入文件是庄或薛的时候,就会出现 ... -
Hessian的学习笔记
2008-12-01 12:20 12531- 整个jar很小,200多K,3.1版本的,当然,我下载的 ... -
编写一个Java程序,对指定文本进行数字签名(文本随意)
2008-10-08 14:12 2882一:需要包含的包 import java.security. ... -
java的property配置文件的用法
2008-07-29 16:26 1772package configuration; ... -
统一异常处理
2008-07-16 16:47 1986package com.bjsxt.oa.manager; ... -
Java反射机制之代理模式
2008-07-02 23:12 1578代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问 ... -
java.lang.reflect.Array的应用
2008-07-02 23:11 1903java.lang.Array 类提供了动态创建和访问数组元 ... -
Java语言的反射机制
2008-07-02 23:10 1693在JAVA运行环境中,对 ... -
@Documented Annotation的使用
2008-07-02 23:09 2487@Documented Annotation的使用: @Do ... -
有关Annotation的继承
2008-07-02 23:09 4073有关Annotation的继承说明: 1、JDK文档中的说明是 ...
相关推荐
Java中DecimalFormat用法详解 DecimalFormat是Java中一种重要的格式化工具,主要用于将数字格式化为指定的样式。通过使用DecimalFormat,我们可以将数字转换为各种格式,例如取小数点后几位、科学计数法、百分比...
java.text.DecimalFormat用法详解 Java中的java.text.DecimalFormat类提供了格式化数字的功能,通过指定pattern来控制数字的格式。下面将详细介绍DecimalFormat的用法和主要特征。 Pattern DecimalFormat的...
下面我们将详细介绍 DecimalFormat 的多种用法。 格式化数字 使用 DecimalFormat 可以根据本地设置或指定的地区设置来格式化数字。可以使用 `NumberFormat.getInstance()` 方法返回 NumberFormat 的一个实例,实际...
在本文中,我们将详细介绍Java DecimalFormat的常用方法,并通过实例代码展示其使用方式。 一、数字格式化 DecimalFormat提供了多种数字格式化方式,例如使用#和0作为占位符。其中,#表示当要格式化的数字位数不足...
DecimalFormat数字格式化用法详解 DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。DecimalFormat 包含一个模式和一组符号,符号含义如下: * 下列字符用在非本地化的模式中。已本地化的...
### 使用`DecimalFormat`格式化输出 除了`BigDecimal`之外,为了更好地控制输出格式,Java还提供了`DecimalFormat`类。`DecimalFormat`允许用户定义输出格式,从而可以控制数字的显示方式,比如固定小数点后的位数...
首先,我们需要获取 DecimalFormat 的实例,可以使用静态方法 `getInstance()`。 ```java DecimalFormat df = DecimalFormat.getInstance(); ``` 设置小数点后面的位数 使用 `setMaximumFractionDigits()` 方法...
下面我们将详细介绍 DecimalFormat 的用法和四舍五入的实现方法。 DecimalFormat 的用法 在 Java 中,我们可以使用 DecimalFormat 来格式化数字,例如: ```java import java.text.*; import java.util.*; ...
如果只需要模式的内部,则可以使用DecimalFormat类解析表达式,方法是: const { parser } = require ( 'DecimalFormat' ) ; const result = parser . parse ( '#.000' ) ; 语法 语法包含在src/de
在上面的代码中,我们创建了一个`DecimalFormat`对象,并使用`format`方法将`double`类型的`num`转换为保留两位小数的字符串。这个过程可以有效地处理各种浮点数,无论是正数、负数还是零。 另外,如果原始数字的...
这个源码资源是一个讲解数学计算处理...掌握Math类提供的各种数学计算方法,如三角函数、指数运算等。 学习Random类的使用,包括生成随机数和调整范围。 理解DecimalFormat类的功能,包括数字格式化、舍入规则设置等。
本文将详细介绍Java.text.DecimalFormat类十进制格式化的方法,包括格式化模板、格式化规则、实例代码等 aspect。 格式化模板 DecimalFormat类使用格式化模板来控制输出的格式,格式化模板是由多个符号组成的,每...
3. **类的加载与实例化**:通过`Class.forName()`加载类,然后使用`newInstance()`方法创建类的实例。 ```java Class<?> la = Class.forName("com.example.Animal"); Animal a = (Animal) la.newInstance(); ``...
可以使用 `DecimalFormat` 或直接用 `String` 的 `format` 方法: ```java public static String formatInteger(int number) { return String.format("%,d", number); } ``` 在这里,`%,d` 是一个占位符,其中 `%...
一旦`DecimalFormat`对象创建完成,就可以使用`format()`方法将`double`类型的数字转换为格式化的字符串。这一步骤的关键在于,`format()`方法能够根据之前设定的模式对数字进行格式化处理。 **format()方法的语法*...
创建一个`DecimalFormat`对象,指定数字格式,然后使用`format()`方法: ```java DecimalFormat df = new DecimalFormat("#.00"); String formatted = df.format(3.1415926); ``` 3. **使用`String.format()`*...
1.第一张方法:使用DecimalFormat API DecimalFormat format = new DecimalFormat(#.##); String numberStr = format.format(numberDecimal); Log.e(TAG,numberStr => + numberStr); 2.第二种方法:使用String....
该方法接收按钮的标签、位置坐标、尺寸及动作监听器作为参数,并将这些信息应用于`GridBagConstraints`对象,从而将按钮正确地放置到界面上。 ### 7. 用户界面布局 计算器的界面采用网格布局,每个按钮占据一定的...
本篇文章将详细介绍如何使用`Environment`、`StatFs`和`DecimalFormat`这三个类来实现这一功能。 首先,`Environment`是Android提供的一个系统类,它包含了与外部存储(通常是SD卡)相关的常量和方法。例如,我们...