`

数字格式化

 
阅读更多

今天复习了下jdk的api。发现了一个数字格式的好工具。

以前做数字格式化都自己莽搓搓的去写。浪费了大量的时间。

记录下来,免得下次搞忘了。

使用类:

java.text
类 NumberFormat

java.lang.Object
  

继承者

java.text.Format
      

继承者

java.text.NumberFormat
所有已实现的接口:
Serializable, Cloneable
直接已知子类:
ChoiceFormat, DecimalFormat

NumberFormat 是所有数值格式的抽象基类。

使用 getInstancegetNumberInstance 来获取常规数值格式。使用 getIntegerInstance 来获取整数数值格式。使用 getCurrencyInstance 来获取货币数值格式。使用 getPercentInstance 来获取显示百分比的格式。使用此格式,小数 0.53 将显示为 53%。

使用 setMinimumFractionDigits 之类的方法还可以控制数值的显示。如果想对格式化和解析进行更多的控制(或者给予用户更多的控制),可以尝试将从工厂方法获取的 NumberFormat 强制转换为 DecimalFormat。这适用于大多数语言环境;只是要记住将其放入一个 try 代码块中,以防遇到特殊情况。

 

使用NumberFormat 类测试下小数 0.53 将显示为 53%:

double d = 0.53d;
NumberFormat numberFormat = NumberFormat.getPercentInstance();
System.out.println(numberFormat.format(d));

 

模式

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#)" 完全相同。

特殊模式字符

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

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

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

用于在前缀或或后缀中为特殊字符加引号,例如 "'#'#" 将 123 格式化为

"#123"。要创建单引号本身,请连续使用两个单引号:"# o''clock"

 

以前做评分功能的时候,功能要求只用保存两位小数点。那时候就用String做格式,判断数字里面是否有小数点,小数位数多少位,大于2位就把2位以后的删除掉。感觉挺麻烦的。

来看看DecimalFormat:

 

// 声明一个测试数据
double num = 10000124d;
// 当数字为整数,没有小数点 结果为: 10,000,124 元
//DecimalFormat format = new DecimalFormat("###,###,###.## 元");
// 默认最后有两个小数点,小数位数不够用0代替 结果为: 10,000,124.00 元
DecimalFormat format = new DecimalFormat("###,###,###.00 元");
System.out.println(format.format(num));

 在看看ChoiceFormat的使用:

ChoiceFormat 允许将格式应用到某个范围的数。它通常用于在 MessageFormat 中处理复数。使用按升序排列的 double 列表指定 choice,列表中每一项都指定一个到下一项的半开区间:

当且仅当 limit[j] <= X < limit[j+1] 时,X 匹配 j
 

如果不匹配,则根据数 (X) 的是太小还是太大,选择使用第一个或最后一个索引。如果 limit 数组不按升序排列,则格式化的结果将不正确。ChoiceFormat 还接受 \u221E(等同于无穷大 (INF))。

列子:

double[] limits = {0,1,2,3,4,5,6};
String[] dayOfWeekNames = {"星期天","星期一","星期二","星期三",
"星期四",
"星期五",
"星期六"};
ChoiceFormat form = new ChoiceFormat(limits, dayOfWeekNames);
 ParsePosition status = new ParsePosition(0);
for (double i = 0.0; i <= 6.0; ++i) {
status.setIndex(0);
System.out.println(i + " -> " + 
 // 将数字表示的星期转换为中文表示的星期
form.format(i) + " -> "
// 数据反解析,将星期转换为数字
+ form.parse(form.format(i),status));
}

 

分享到:
评论

相关推荐

    把数字格式化成大写的金额显示(完整版)

    把数字格式化成大写的金额显示(完整版)

    freemarker内置函数和数字格式化.doc

    ### 四、数字格式化 Freemarker支持数字的格式化输出,虽然文档中没有直接提及,但通常可以通过Java的`?number_format`函数实现,例如将数字格式化为货币样式: `${your_number?number_format("¤ #,##0.00;¤ -#,#...

    C#String.Format数字格式化输出

    C#String.Format数字格式化输出;有比较详细的讲解。希望对大家有用。

    jquery数字格式化分隔符插件

    **jQuery数字格式化分隔符插件:jquery-number-divider** 在网页开发中,尤其是在处理大量数据或财务信息时,数字的格式化显得尤为重要。`jquery-number-divider` 是一个专为jQuery设计的轻量级插件,它使得在前端...

    JavaScript数字格式化

    该文档为javascript的数字格式化方法,可用于保留小数位,强制添0等操作

    C#String.Format数字格式化输出 .txt

    下面将深入解析`String.Format`方法在数字格式化中的应用,以及如何通过不同的格式化字符串来达到预期的输出效果。 ### 基本用法 `String.Format`的基本语法是: ```csharp string result = string.Format(format...

    C# 将数字格式化输出

    在C#编程语言中,将数字格式化输出是一项常见的需求,尤其当涉及到数据显示、报告生成或数据交流时。本文将深入解析C#中数字格式化的各种写法与应用,帮助开发者掌握这一技能,提高代码的可读性和实用性。 ### C#...

    jQuery数字格式化分隔符代码

    `jQuery数字格式化分隔符代码`提供了一种高效的方法,将大数字转换为更易读的形式,通过添加分隔符如逗号或空格来提高可读性。这个插件允许开发者自定义分隔符,满足不同场景的需求。 首先,我们来理解jQuery的核心...

    String.Format数字格式化输出

    ### String.Format 数字格式化输出 在C#中,`String.Format`方法是进行字符串格式化的一种非常实用的方式。它允许我们对数字、日期、时间等数据类型进行精确的格式控制,使得输出更加符合需求或者易于阅读。本文将...

    Java字符串 日期 数字格式化输出-.doc

    Java 字符串日期数字格式化输出 Java 中的字符串日期数字格式化输出是一种常见的操作,特别是在数据输出和显示时。 Java 提供了多种方式来实现格式化输出,包括使用 NumberFormat、DecimalFormat 和 ...

    JavaScript数字格式化函数

    在JavaScript中,数字格式化是将数值转换为特定格式的过程,比如添加逗号分隔符、保留小数位数、货币格式等。这通常涉及到字符串处理和数学运算。本篇文章将深入探讨JavaScript中的数字格式化函数及其应用。 一、...

    数字格式化工具类

    标题中的“数字格式化工具类”指的是在编程中用于处理数字字符串的一种实用程序类,它通常包含各种方法,用于将数字转换成特定格式,如货币、百分比、科学记数法等。这样的工具类可以极大地简化开发过程,提高代码...

    jsp格式化数字

    这里主要介绍两种常用的JSP标签库来实现数字格式化:JSTL(JavaServer Pages Standard Tag Library)中的`&lt;fmt:formatNumber&gt;`标签和EL(Expression Language)表达式。 `&lt;fmt:formatNumber&gt;`是JSTL fmt 标签库中的...

    jQuery数字格式化分隔符代码.zip

    《jQuery数字格式化分隔符代码详解》 在网页开发中,我们经常遇到需要将大数字展示得更易读的情况,比如金额、人口数量等。这时,数字格式化分隔符就显得尤为重要。jQuery作为一款广泛使用的JavaScript库,提供了...

    Java字符串 日期 数字格式化输出.doc

    对于更复杂的数字格式化需求,Java提供了`DecimalFormat`类。你可以通过指定一个模式(pattern)来创建`DecimalFormat`实例,从而实现自定义格式。模式中包含一些特殊字符,如0和#,用于填充和省略数字,还有小数点...

    Java字符串_日期_数字格式化输出

    ### Java字符串、日期与数字格式化输出详解 #### 一、引言 在Java编程语言中,对数据类型的处理和格式化输出是非常重要的一个环节。无论是处理字符串、日期还是数字,都需要开发者具备一定的技巧和方法来确保数据的...

Global site tag (gtag.js) - Google Analytics