Merlin的魔力: 格式化数值和货币

java.text 包允许通过与特定语言无关的方式格式化文本消息、日期和数值。许多人配合 MessageFormat 类使用资源包来为用户本地化消息。更多的人似乎使用 DateFormat 和 SimpleDateFormat 类来操作日期字符串,既用于输入也用于输出。最少见的用法似乎是使用 NumberFormat 类及其相关的子类 DecimalFormat 和 ChoiceFormat 。在本月的讨论中,我们将研究一下这三个未得到充分利用的类以及 Currency 类,看看 J2SE 1.4 已经变得有多么的全球化。

数值格式化基类:NumberFormat

如果您来自美国,您会在较大的数值中间放置逗号来表示千和百万(等等,每三个数值使用一个逗号)。对于浮点数,您将在整数部分和小数部分之间放置小数点。对于金钱,货币符号 $ 放在金额的前面。如果 您从来没有到过美国以外的地方,可能就不会关心用元(¥)来格式化的日本货币,用英镑(£)来格式化的英国货币,或者用欧元(€)来表示的其他欧洲国家的货币。

对于那些我们确实关心的货币,我们可以使用 NumberFormat 及其相关的类来格式化它们。开发人员使用 NumberFormat 类来读取用户输入的数值,并格式化将要显示给用户看的输出。

与 DateFormat 类似, NumberFormat 是一个抽象类。您永远不会创建它的实例――相反,您总是使用它的子类。虽然可以通过子类的构造函数直接创建子类,不过 NumberFormat 类提供了一系列 get XXXInstance() 方法,用以获得不同类型的数值类的特定地区版本。这样的方法共有五个:

getCurrencyInstance()

getInstance()

getIntegerInstance()

getNumberInstance()

getPercentInstance()

具体使用哪一个方法取决于您想要显示的数值类型(或者想要接受的输入类型)。每个方法都提供了两个版本――一个版本适用于当前地区,另一个版本接受一个 Locale作为参数,以便可能地指定一个不同的地区。

在 J2SE 1.4中, NumberFormat 新增的内容是 getIntegerInstance()、 getCurrency() 和 setCurrency() 方法。下面让我们研究一下新的 getIntegerInstance() 方法。稍后将会探讨 get/set 货币方法。

使用 NumberFormat 的基本过程是获得一个实例并使用该实例。挑选恰当的实例的确需要费一番思量 。通常您不希望使用通用的 getInstance 或者 getNumberInstance() 版本 ,因为您不确切知道您将会得到什么。相反 ,您会使用像 getIntegerInstance() 这样的方法 ,因为您希望把某些内容显示为整数而不需要任何小数值 。清单1展示了这一点 ,我们在其中把数值 54321 显示为适合于美国和德国的格式。

清单 1. 使用 NumberFormat

import java.text.*;
import java.util.*;
public class IntegerSample {
  public static void main(String args[]) {
   int amount = 54321;
   NumberFormat usFormat =
    NumberFormat.getIntegerInstance(Locale.US);
   System.out.println(usFormat.format(amount));
   NumberFormat germanFormat =
    NumberFormat.getIntegerInstance(Locale.GERMANY);
   System.out.println(germanFormat.format(amount));
  }
}

运行该代码将产生如清单2所示的输出。注意第一种格式(美国)中的逗号分隔符和第二种格式中的点号分隔符。

清单 2. NumberFormat 输出

54,321
54.321

时间: 2024-10-28 04:53:54

Merlin的魔力: 格式化数值和货币的相关文章

java格式化数值成货币格式示例_java

格式化一个数值,比如123456789.123,希望显示成"$123,456,789.123".要完成需求,可以用java.text.NumberFormat类来进行格式化 NumberFormat类提供了对数值格式的封装.在JDK中,一般使用NumberFormt的子类----java.text.DecimalFormat完成这个功能.该类最常见的构造函数为: public DecimalFormat(String pattern) 其中,参数pattern表示传入的格式字符串 代码

Merlin的魔力: Swing 的新JFormattedTextField组件

Java 2 标准版(J2SE),版本 1.4 为可用的 GUI 元素调色板添加了 2 个新的 Swing 组件: JSpinner 和 JFormattedTextField .在 Merlin 的魔力专栏的第一篇我们就介绍了 JSpinner 组件:我们现在将要探讨 JFormattedTextField . 虽然 JFormattedTextField 组件看起来与 JTextField 相似,但是它的行为与 JSpinner 完全不同.在最简单的情况下,您可以为电话号码提供一个类似"(#

(C#)数值型货币的大写转换

大写|货币|转换 本人现在做的项目要求对数值型货币,转换成大写,在网上搜索了半天,没有找到C#写的类型,不得不自己写了,测试了,还能满足要求,只是算法有点繁琐,有哪位大虾再给改改! 下面就是我得代码:using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data; namespace WinMark

Merlin的魔力: 异常和日志记录

为了理解问题的根源并适当地响应,Merlin 发行版添加了几个与异常处理相关的功能.现在,您不必手工分析堆栈转储信息就可以检查堆栈跟踪信息,并且可以把异常连成一条菊花链,这样就能够在重新抛出异常时附加上异常的原因,这会大大促进调试工作.此外,现在还有一个内建的日志记录工具用来记录消息的不同级别.在 Merlin 的魔力系列的这一部分,John Zukowski 演示了这些新的日志记录和异常功能的工作原理并提供了一个示例程序以供查看和下载. 这个 Merlin 发行版中新添加的许多功能(比如异常处

Merlin的魔力: J2SE 1.4.2提供两种新的外观设计

迄今为止,所有Merlin的魔力专栏都是关于Java 1.4版本的新特性,本文主要针对目前正在测试的1.4.2版本.Sun认为Windows的经典外观已经过时,没有人再使用Motif了 -- 至少在用户桌面上.您将在这一标准Java平台的最新版本中找到新款Windows外观以及称为GTK+的全新外观,当用户使用Windows XP操作系统时新款Windows外观看起来象Windows XP,GTK+使用普通Linux桌面的外观. Swing架构提供可插入外观框架.例如,该框架提供一种标准方法使所

数值型货币的大写转换

大写|货币|转换 using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data; namespace WinMarket{ /// <summary> /// Classfun 的摘要说明. /// </summary> public class Classfun { private

C#格式化数值结果表(格式化字符串)

字符 说明 示例 输出 C 货币 string.Format("{0:C3}", 2) $2.000 D 十进制 string.Format("{0:D3}", 2) 002 E 科学计数法 1.20E+001 1.20E+001 G 常规 string.Format("{0:G}", 2) 2 N 用分号隔开的数字 string.Format("{0:N}", 250000) 250,000.00 X 十六进制 string

Merlin的魔力: Java联网增强技术

Java 编程中的联网包括了定位和识别资源的能力以及通过 TCP 和 UDP 连接进行通信的能力.首先,您需要识别具有象 www.ibm.com 这样名称的资源,然后打开到该资源的连接,最后在您自己和连接的另一端之间发送信息包.由于安全性原因,可能会包括其它任务,但是整个过程是一样的.对于 Java 平台,会在 java.net 包中找到支持这些操作的类.从 Java 编程的早期到现在,这些操作中大多数都未曾发生太大的变化.但是,随着 Merlin 的发展,这些基本操作中有些已经作了改进,以支持

Merlin的魔力: Merlin的新I/O缓冲区的输入和输出

Java 2 平台标准版(Java 2 Platform Standard Edition,J2SE)1.4 对 Java 平台的 I/O 处理能力做了大量更改.它不仅用流到流的链接方式继续支持以前 J2SE 发行版的基于流的 I/O 操作,而且 Merlin 还添加了新的功能 - 称之为新 I/O 类(NIO),现在这些类位于 java.nio 包中. I/O 执行输入和输出操作,将数据从文件或系统控制台等传送至或传送出应用程序.(有关 Java I/O 的其它信息,请参阅 参考资料). 缓冲