Java数字格式:DecimalFormat

在Java Numeric Formatting一文中 ,我描述并演示了NumberFormat静态方法提供的一些有用实例,例如NumberFormat.getNumberInstance(Locale) , NumberFormat.getPercentInstance(Locale) , NumberFormat.getCurrencyInstance(Locale)和NumberFormat.getIntegerInstance(Locale) ) 。 事实证明,所有这些抽象NumberFormat实例实际上都是DecimalFormat实例,它扩展了NumberFormat

下一个代码清单和相关的输出展示了NumberFormat的“ getInstance”方法返回的所有实例实际上都是DecimalFormat实例。 区分同一DecimalFormat类的这些实例的是它们的属性的设置,例如最小和最大整数数字(小数点左边的数字)以及小数位数的最小和最大数目(小数点右边的数字) 。 它们都共享相同的舍入模式和货币设置。

NumberFormat.getInstance()提供的实例是DecimalFormat实例

/*** Write characteristics of provided Currency object to* standard output.** @param currency Instance of Currency whose attributes*    are to be written to standard output.*/
public void printCurrencyCharacteristics(final Currency currency)
{out.print("\tCurrency: " + currency.getCurrencyCode() + "(ISO 4217 Code: " + currency.getNumericCode() + "), ");out.println(currency.getSymbol() + ", (" + currency.getDisplayName() + ")");
}/*** Writes characteristics of provided NumberFormat instance* to standard output under a heading that includes the provided* description.** @param numberFormat Instance of NumberFormat whose key*    characteristics are to be written to standard output.* @param description Description to be included in standard*    output.*/
public void printNumberFormatCharacteristics(final NumberFormat numberFormat, final String description)
{out.println(description + ": " + numberFormat.getClass().getCanonicalName());out.println("\tRounding Mode:           " + numberFormat.getRoundingMode());out.println("\tMinimum Fraction Digits: " + numberFormat.getMinimumFractionDigits());out.println("\tMaximum Fraction Digits: " + numberFormat.getMaximumFractionDigits());out.println("\tMinimum Integer Digits:  " + numberFormat.getMinimumIntegerDigits());out.println("\tMaximum Integer Digits:  " + numberFormat.getMaximumIntegerDigits());printCurrencyCharacteristics(numberFormat.getCurrency());if (numberFormat instanceof DecimalFormat){final DecimalFormat decimalFormat = (DecimalFormat) numberFormat;out.println("\tPattern: " + decimalFormat.toPattern());}
}/*** Display key characteristics of the "standard"* NumberFormat/DecimalFormat instances returned by the static* NumberFormat methods getIntegerInstance(), getCurrencyInstance(),* getPercentInstance(), and getNumberInstance().*/
public void demonstrateDecimalFormatInstancesFromStaticNumberFormatMethods()
{final NumberFormat integerInstance = NumberFormat.getIntegerInstance();printNumberFormatCharacteristics(integerInstance, "IntegerInstance");final NumberFormat currencyInstance = NumberFormat.getCurrencyInstance();printNumberFormatCharacteristics(currencyInstance, "CurrencyInstance");final NumberFormat percentInstance = NumberFormat.getPercentInstance();printNumberFormatCharacteristics(percentInstance, "PercentInstance");final NumberFormat numberInstance = NumberFormat.getNumberInstance();printNumberFormatCharacteristics(numberInstance, "NumberInstance");
}

numberFormatStaticProvidedInstancesAreDecimalFormatInstances

尽管我的上一篇和到目前为止的文章已经演示了通过静态NumberFormat访问方法获取DecimalFormat实例,但是DecimalFormat还具有三个重载的构造函数DecimalFormat() , DecimalFormat(String)和DecimalFormat(String,DecimalFormatSymbols) 。 但是请注意, DecimalFormat的Javadoc文档中有一条警告,指出“通常,请勿直接调用DecimalFormat构造函数,因为NumberFormat工厂方法可能会返回DecimalFormat以外的子类。” 尽管有Javadoc警告,但我接下来的几个示例仍使用其直接构造函数实例化DecimalFormat实例,因为这样做不会造成任何危害。

DecimalFormat实例在很大程度上控制十进制数的表示格式。 下面的代码针对各种不同的自定义模式运行在先前示例中使用的标准数字集。 代码清单后的屏幕快照显示了应用这些模式时如何呈现这些数字。

/*** Apply provided pattern to DecimalFormat instance and write* output of application of that DecimalFormat instance to* standard output along with the provided description.** @param pattern Pattern to be applied to DecimalFormat instance.* @param description Description of pattern being applied.*/
private void applyPatternToStandardSample(final String pattern, final String description)
{final DecimalFormat decimalFormat = new DecimalFormat(pattern);printHeader(description + " - Applying Pattern '" + pattern + "'");for (final double theDouble : ourStandardSample){out.println(theDouble + ": " + decimalFormat.format(theDouble));}
}/*** Demonstrate various String-based patters applied to* instances of DecimalFormat.*/
public void demonstrateDecimalFormatPatternStringConstructor()
{final String sixFixedDigitsPattern = "000000";applyPatternToStandardSample(sixFixedDigitsPattern, "Six Fixed Digits");final String sixDigitsPattern = "###000";applyPatternToStandardSample(sixDigitsPattern, "Six Digits Leading Zeros Not Displayed");final String percentagePattern = "";applyPatternToStandardSample(percentagePattern, "Percentage");final String millePattern = "\u203000";applyPatternToStandardSample(millePattern, "Mille");final String currencyPattern = "\u00A4";applyPatternToStandardSample(currencyPattern, "Currency");final String internationalCurrencyPattern = "\u00A4";applyPatternToStandardSample(internationalCurrencyPattern, "Double Currency");final String scientificNotationPattern = "0.###E0";applyPatternToStandardSample(scientificNotationPattern, "Scientific Notation");
}
==================================================================
= Six Fixed Digits - Applying Pattern '000000'
==================================================================
NaN:  
0.25: 000000
0.4: 000000
0.567: 000001
1.0: 000001
10.0: 000010
100.0: 000100
1000.0: 001000
10000.0: 010000
100000.0: 100000
1000000.0: 1000000
1.0E7: 10000000
Infinity: ∞
==================================================================
= Six Digits Leading Zeros Not Displayed - Applying Pattern '###000'
==================================================================
NaN:  
0.25: 000
0.4: 000
0.567: 001
1.0: 001
10.0: 010
100.0: 100
1000.0: 1000
10000.0: 10000
100000.0: 100000
1000000.0: 1000000
1.0E7: 10000000
Infinity: ∞
==================================================================
= Percentage - Applying Pattern ''
==================================================================
NaN:  
0.25: %25
0.4: %40
0.567: %57
1.0: %100
10.0: %1000
100.0: %10000
1000.0: %100000
10000.0: %1000000
100000.0: %10000000
1000000.0: %100000000
1.0E7: %1000000000
Infinity: %∞
==================================================================
= Mille - Applying Pattern '‰00'
==================================================================
NaN:  
0.25: ‰250
0.4: ‰400
0.567: ‰567
1.0: ‰1000
10.0: ‰10000
100.0: ‰100000
1000.0: ‰1000000
10000.0: ‰10000000
100000.0: ‰100000000
1000000.0: ‰1000000000
1.0E7: ‰10000000000
Infinity: ‰∞
==================================================================
= Currency - Applying Pattern '¤'
==================================================================
NaN:  
0.25: $0
0.4: $0
0.567: $1
1.0: $1
10.0: $10
100.0: $100
1000.0: $1000
10000.0: $10000
100000.0: $100000
1000000.0: $1000000
1.0E7: $10000000
Infinity: $∞
==================================================================
= Double Currency - Applying Pattern '¤'
==================================================================
NaN:  
0.25: $0
0.4: $0
0.567: $1
1.0: $1
10.0: $10
100.0: $100
1000.0: $1000
10000.0: $10000
100000.0: $100000
1000000.0: $1000000
1.0E7: $10000000
Infinity: $∞
==================================================================
= Scientific Notation - Applying Pattern '0.###E0'
==================================================================
NaN:  
0.25: 2.5E-1
0.4: 4E-1
0.567: 5.67E-1
1.0: 1E0
10.0: 1E1
100.0: 1E2
1000.0: 1E3
10000.0: 1E4
100000.0: 1E5
1000000.0: 1E6
1.0E7: 1E7
Infinity: ∞

对于最后两个应用DecimalFormat示例,我将通过使用NumberFormat.getInstance(Locale)的首选方法来获取DecimalFormat的实例。 第一个代码清单演示了应用于同一double的不同语言环境,然后演示了每种语言的输出格式。

/*** Provides an instance of DecimalFormat based on the provided instance* of Locale.** @param locale Locale to be associated with provided instance of*    DecimalFormat.* @return Instance of DecimalFormat associated with provided Locale.* @throws ClassCastException Thrown if the object provided to me*    by NumberFormat.getCurrencyInstance(Locale) is NOT an instance*    of class {@link java.text.DecimalFormat}.*/
private DecimalFormat getDecimalFormatWithSpecifiedLocale(final Locale locale)
{final NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);if (!(numberFormat instanceof DecimalFormat)){throw new ClassCastException("NumberFormat.getCurrencyInstance(Locale) returned an object of type "+ numberFormat.getClass().getCanonicalName() + " instead of DecimalFormat.");}return (DecimalFormat) numberFormat;
}/*** Demonstrate formatting of double with various Locales.*/
public void demonstrateDifferentLocalesCurrencies()
{final double monetaryAmount = 14.99;out.println("Locale-specific currency representations of " + monetaryAmount + ":");out.println("\tLocale.US:            "+ getDecimalFormatWithSpecifiedLocale(Locale.US).format(monetaryAmount));out.println("\tLocale.UK:            "+ getDecimalFormatWithSpecifiedLocale(Locale.UK).format(monetaryAmount));out.println("\tLocale.ENGLISH:       "+ getDecimalFormatWithSpecifiedLocale(Locale.ENGLISH).format(monetaryAmount));out.println("\tLocale.JAPAN:         "+ getDecimalFormatWithSpecifiedLocale(Locale.JAPAN).format(monetaryAmount));out.println("\tLocale.GERMANY:       "+ getDecimalFormatWithSpecifiedLocale(Locale.GERMANY).format(monetaryAmount));out.println("\tLocale.CANADA:        "+ getDecimalFormatWithSpecifiedLocale(Locale.CANADA).format(monetaryAmount));out.println("\tLocale.CANADA_FRENCH: "+ getDecimalFormatWithSpecifiedLocale(Locale.CANADA_FRENCH).format(monetaryAmount));out.println("\tLocale.ITALY:         "+ getDecimalFormatWithSpecifiedLocale(Locale.ITALY).format(monetaryAmount));
}
Locale-specific currency representations of 14.99:Locale.US:            $14.99Locale.UK:            £14.99Locale.ENGLISH:       ¤14.99Locale.JAPAN:         ¥15Locale.GERMANY:       14,99 €Locale.CANADA:        $14.99Locale.CANADA_FRENCH: 14,99 $Locale.ITALY:         € 14,99

到目前为止,我的DecimalFormat示例专注于格式化表示的数字。 最后一个示例是另一个方向,并从字符串表示形式解析值。

/*** Demonstrate parsing.*/
public void demonstrateParsing()
{final NumberFormat numberFormat = NumberFormat.getCurrencyInstance(Locale.US);final double value = 23.23;final String currencyRepresentation = numberFormat.format(value);out.println("Currency representation of " + value + " is " + currencyRepresentation);try{final Number parsedValue = numberFormat.parse(currencyRepresentation);out.println("Parsed value of currency representation " + currencyRepresentation + " is " + parsedValue);}catch (ParseException parseException){out.println("Exception parsing " + currencyRepresentation + parseException);}
}
Currency representation of 23.23 is $23.23
Parsed value of currency representation $23.23 is 23.23

所示的最后一个示例实际上不需要访问具体的DecimalNumber方法,并且能够仅使用NumberFormat通告的方法。 本示例使用NumberFormat.format(double)格式化货币表示形式,然后解析提供的货币表示形式以使用NumberFormat.parse(String)返回原始值。

NumberFormat ,尤其是DoubleFormat ,“格式化和解析任何语言环境的数字”。

翻译自: https://www.javacodegeeks.com/2015/08/java-numeric-formatting-decimalformat.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信公众号(订阅号)如何开通付费功能?

前几天看了一下启舰的一个视频中谈到他做自媒体的收入,我记得应该有一年30多万的收入,大概组成是微信公众号广告每个月2万*12个月。两本安卓书收取版权提成,根据出版量8%-10%不等,他一年的出版量在10000左右吧,每本书每个月大概有2000元的样子*12个月,还有一些B站及其他的…

Kunyu(坤舆)

本文转载于&#xff1a;https://www.anquanke.com/post/id/248802 0x00 介绍 工具介绍 Kunyu (坤舆)&#xff0c;名字取自 <坤舆万国全图> &#xff0c;测绘实际上是一个地理信息相关的专业学科&#xff0c;针对海里的、陆地的、天上的地理信息进行盘点。同样应用于网络…

rabbitmq——镜像队列

转自&#xff1a;http://my.oschina.net/hncscwc/blog/186350?p1 1. 镜像队列的设置 镜像队列的配置通过添加policy完成&#xff0c;policy添加的命令为&#xff1a; rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority] -p Vhost: 可选参数&#x…

微信订阅号如何开通付费功能

前几天看了一下启舰的一个视频中谈到他做自媒体的收入&#xff0c;我记得应该有一年30多万的收入&#xff0c;大概组成是微信公众号广告每个月2万*12个月。两本安卓书收取版权提成&#xff0c;根据出版量8%-10%不等&#xff0c;他一年的出版量在10000左右吧&#xff0c;每本书每…

实战sqlmap绕过WAF

本文转载于https://xz.aliyun.com/t/10385 实战演示 通过前期的信息收集发现存在注入的页面如下&#xff1a; 直接使用sqlmap跑发现出现如下错误&#xff1a; python2 sqlmap.py -u "http://xxxx?&daxxtaenull&paramexxxxxx" --batch --delay1 --random…

QQ群群排名如何进行SEO优化?

QQ群排名有多个方面&#xff0c;比如你的qq群名称&#xff0c;人数&#xff0c;还有活跃度等等&#xff0c;很多因素影响你的群排名。下面给大家讲解如何做到搜索第一。第一&#xff1a;群名称群名称一定要和你搜索的关键词相匹配&#xff0c;比如我建的一个粉丝群“爱嵩阁”&a…

Flash不同版本的下载安装及必要的系统组件未正常运行的解决办法

在一个外包平台刷入职培训视频&#xff0c;类似于慕课的课程&#xff0c;需要安装Flash才能播放。一般推荐谷歌浏览器&#xff0c;值得注意的是2020年12月&#xff0c;谷歌浏览器将不再支持flash flash官网 安装步骤 在百度搜索"flash"&#xff0c;点击Flash中国官…

UEditor 任意文件上传漏洞

1 漏洞简介 1.1 漏洞描述 Ueditor是百度开发的一个网站编辑器&#xff0c;目前已经不对其进行后续开发和更新&#xff0c;该漏洞只存在于该编辑器的.net版本。其他的php,jsp,asp版本不受此UEditor的漏洞的影响&#xff0c;.net存在任意文件上传&#xff0c;绕过文件格式的限制…

HDU 3072 SCC Intelligence System

给出一个带权有向图&#xff0c;要使整个图连通。SCC中的点之间花费为0&#xff0c;所以就先缩点&#xff0c;然后缩点后两点之间的权值为最小边的权值&#xff0c;把这些权值累加起来就是答案。 1 #include <iostream>2 #include <cstdio>3 #include <algorith…

再见,Springboot和SpringCloud

Java中说到微服务肯定离不开Spring Boot和Spring Cloud&#xff0c;这两者到底有什么关系&#xff0c;什么是微服务&#xff0c;如果单纯的说SpringBoot&#xff0c;SpringCloud&#xff0c;都是不准确的&#xff0c;那应该怎么回答。官网对于Spring Boot的介绍Spring Boot mak…

通过暴露出来的OA和github信息拿Shell

本文转载于https://xz.aliyun.com/t/10392 记一次授权渗透测试 一&#xff1a;信息收集阶段 因为目标是学校&#xff0c;一般会去考虑收集学号&#xff0c;教工号。因为有的登陆点需要此类信息&#xff0c;且密码存在规律性&#xff08;身份证后六位&#xff0c;123456&#xf…

手机上可以编程看代码的软件

以后大家会在路上看到很多人拿着手机,他不是在聊天,他有可能是运维工程师、也可能是算法开发、也可能是java开发,还可能是客户端开发,也可能是前端开发... 让你编程一直在路上,这到底是程序员的福音,还是码农的枷锁。 粉丝提问: 这里介绍几款可以在手机上编程的app,分…

给你的执行力马上充值

“执行力就是在既定的战略和愿景的前提下,组织对内外部可利用的资源进行综合协调,制定出可行性的战略,并通过有效的执行措施从而最终实现组织目标、达成组织愿景的一种力量。执行力是一个变量,不同的执行者在执行同一件事情的时候也会得到不同的结果。执行力不但因人而异,而且还…

性能,可伸缩性和活力

本文是我们学院课程中名为Java Concurrency Essentials的一部分 。 在本课程中&#xff0c;您将深入探讨并发的魔力。 将向您介绍并发和并发代码的基础知识&#xff0c;并学习诸如原子性&#xff0c;同步和线程安全之类的概念。 在这里查看 &#xff01; 目录 1.简介 2.表现…

BurpSuite v2021.8.2安装使用

文章前言 几个月之前&#xff0c;Burpsuit官方发布了BurpSuite v2021.8.2&#xff0c;但是迟迟没有时间来试试手&#xff0c;正好借着这次调休的时间来写写文章&#xff0c;顺便更新一下Burpsuite 软件下载 天翼云盘 极速安全 家庭云|网盘|文件备份|资源分享 软件安装 Step 1&a…

程序员赚钱资源汇总,结合自己亲身经历

知识计算机知识深入理解计算机系统-必修课&#xff0c;NB学校的NB课程的NB教材代码大全-&#xff08;不要被这个名字吓到&#xff0c;英文叫做 Code complete&#xff09;微软的书&#xff0c;几乎可以当作是软件工程的百科全书。很少有人完全精通甚至完成这本书中所有部分的学…

逍遥模拟器配置burpsuite抓包环境

电脑与逍遥模拟器处于同一网段&#xff0c;在burpsuite中设置代理&#xff1a; 之后在逍遥模拟器中设置网络代理 之后直接下载下面的证书并且将其拖放到逍遥模拟器中&#xff1a; 证书下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1qJmcKcVj3NqmrWKf6zb83g …

OC本学习笔记Foundation框架NSString与NSMutableString

一、NSString与NSMutableString 相信大家对NSString类都不陌生。它是OC中提供的字符串类。它的对象中的字符串都是不可变的&#xff0c;而它的子类NSMutableString类的对象中的字符串就是可变的。什么是可变与不可变呢&#xff1f;二者的差别就是在已经创建的一个字符串…

phpMyAdmin渗透利用总结

phpMyAdmin渗透利用总结 前言 总结一下常见的phpmyadmin的漏洞利用姿势 简介 phpMyAdmin 是一个以PHP为基础&#xff0c;以Web-Base方式架构在网站主机上的MySQL的数据库管理工具&#xff0c;让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂…

SQL之条件判断专题

Case when (case when 情况1 then 结果1 when 情况1 then 结果1 else &#xff0b;剩余结果 end ) 列名 IF表达式 IF(判断内容&#xff0c;0&#xff0c;1) SELECT IF( sex1&#xff0c;男 &#xff0c;女 )sex from student IFNULL表达式 IF(判断内容&#xff0c;x) 假如判…