概述

基于Java,介绍将浮点类型小数进行格式化的方案。

正文

在Java中,用于格式化小数的类是java.text.DecimalFormat,比如你可以这样使用:

double data = 3334590479.22d;
System.out.println(data); // 3.33459047922E9 java.text.DecimalFormat df = new java.text.DecimalFormat("$#,###.##");
String result = df.format(data);
System.out.println(result); // $3,334,590,479.22

对于比较大的数值,默认使用科学表示法(scientific notation);使用java.text.DecimalFormat指定格式,则用指定的格式。

格式"$#,###.##"包含以下语义:

1. 前缀为$

2. 整数部分每3位数为一组

3. 最多保留2位小数

关于格式

一个格式的大致结构是:Prefixopt Number Suffixopt,即前缀 + 数字 + 后缀;其中前缀和后缀都是可选的。

关于分组

组分隔符使用,且只能在整数部分使用;不管模式中有多少个分隔符,最右边的那一个有效;每一组的个数就是最右边的分隔符之右的整数位数。

所以"#,##,###,####" == "######,####" == "##,####,####"

关于小数

小数分隔符使用.,用以分隔整数部分和小数部分。

关于数字特殊字符

1. #

#是一个特殊字符,用于数字部分;它表示显示数字,但是最前面和最后面的0不予显示。

data:02222.20
pattern:",###.##"
result:2,222.2

#用于整数部分没有数位的限制,但是用于小数部分,却有“最多只能有多少位小数的意思”,多余的进行舍入。比如:

data:2222.222
pattern:",###.##"
result:2,222.22

2. 0

0和#的用法是相近的,却又略有不同;不同之处在于:

a. 0限制整数部分最少出现的位数;不足这个位数的,前面补0

data:22.26
pattern:"0,000.00"
result:0,022.26

b. 0限制小数部分出现的位数;不足补0,多的舍入

data:22.26
-----------------
pattern:"00.000"
result:22.260
-----------------
pattern:"00.0"
result:22.3

3. E

科学表示法,尾数和指数的分隔符。

具体内容见后文。

关于前缀、后缀

除\uFFFE, \uFFFF和特殊字符之外的任意Unicode字符,都可以作为前缀、后缀;有四个特殊的字符:

1. %

将数字乘以100

data:1234.567
pattern:",###.##%"
result:123,456.7%

2. \u2030

将数字乘以1000

data:1234.567
pattern:",###.##\u2030"
result:1,234,567‰

3. ¤(\u00A4)

本地化货币符号,如果连续出现两次,代表货币符号的国际代号。

data:1234.567
---------------------
pattern:",###.##¤"
result:1,234.57¥
---------------------
pattern:",###.##¤¤"
result:1,234.57CNY

4. '

用于引用特殊的字符,作为前缀或后缀。

data:1234.567
pattern:"'#',###.##"
result:#1,234.57

如果想使用'本身作为前缀或后缀,连续输入两次:

data:1234.567
pattern:"'',###.##"
result:'1,234.57

关于科学表示法

科学表示法是在数字部分的尾部添加如E0的内容,其中E是尾数和指数的分隔符,E后面的0的个数表示指数的最少位数(不足前面补0)。

data:1E5
pattern:0.#E00
result:1E05 // 注意指数有2位

E的前面必须要有内容,至少要有一个#或者0,否则E就被当作前缀处理了:

data:1E5
---------------
pattern:"E0"
result:E100000
---------------
pattern:"0E0"
result:1E5
---------------
pattern:"#E0"
result:.1E6

指数部分没有多少内容,下面讨论尾数部分。

尾数一般包括整数和小数,如果整数部分没有内容(.前面没有内容),有效数字就全部在小数上:

data:12345E5
pattern:".###E0"
result:.123E10

如果整数部分需要保留几位数,就使用几个0(使用#的结果有点匪夷所思,大家自行尝试):

data:12345E5
----------------------
pattern:"0.###E0"
result:1.234E9
----------------------
pattern:"00.###E0"
result:12.345E8
---------------------
pattern:"000.###E0"
result:123.45E7

小数部分,如果想实现“最多保留几位小数”的效果,在pattern的.之后添加相应个#。这样,多余的会舍入;如果想实现“恰好保留几位小数”的效果,在pattern的.之后添加相应个0。这样,缺少会在后面补0,多余的会舍入。

data:123E5
------------------
pattern:"0.#E0"
result:1.2E7
------------------
pattern:"0.##E0"
result:1.23E7
------------------
pattern:"0.###E0"
result:1.23E7
==================
pattern:"0.0E0"
result:1.2E7
------------------
pattern:"0.00E0"
result:1.23E7
------------------
pattern:"0.000E0"
result:1.230E7

Java浮点类型的格式化的更多相关文章

  1. java浮点类型计算

    java浮点类型需要采用java.math.*这个工具包,这样的计算结果才是我们想要的.呵呵 import java.math.BigDecimal; import java.text.NumberF ...

  2. java 基础 浮点类型

    1.浮点类型用于表示小数的数据类型. 2.浮点数原理:也就是二进制科学计数法. 3.Java的浮点类型有float和double两种. 4.Java默认浮点类型计算的结果是double类型,字面量也是 ...

  3. Java中浮点类型的精度问题 double float

    要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法与浮点数的结构组成.因为机器只认识01,你想表示小数,你要机器认识小数点这个东西,必须采用某种方法.比如,简单点的,float四个字 ...

  4. Java基础扫盲系列(二)—— Java中BigDecimal和浮点类型

    一直以来我几乎未使用过BigDecimal类型,只有在DB中涉及到金额字段时听说要用Decimal类型,但是今天再项目代码中看到使用BigDecimal表示贷款金额. 本篇文章不是介绍BigDecim ...

  5. java.lang.NumberFormatException: Infinite or NaN原因之浮点类型除数为0结果探究

    背景 在对Double类型的数据进行计算操作,将结果转化为BigDecimal时抛出了下面的异常,进行了Debug才发现了问题原因,同时也暴露出了自己在一些基础知识上还有些欠缺. Exception ...

  6. JAVA字符串与整形、浮点类型之间的相互转换总结

    1.字符串转化为整形.浮点类型 String s = "100"; //方法一 int a = Integer.parseInt(String s); Long.parseLong ...

  7. 【转】Java 中字符串的格式化

    原文网址:http://blog.csdn.net/aimartt/article/details/8307237 参考资料:JDK API 1.6.0 中文文档 1.格式字符串语法 产生格式化输出的 ...

  8. Java 中字符串的格式化

    1.格式字符串语法 产生格式化输出的每个方法都需要格式字符串 和参数列表.格式字符串是一个String,它可以包含固定文本以及一个或多个嵌入的格式说明符.请考虑以下示例: Calendar c = C ...

  9. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

随机推荐

  1. 51Nod 1095 Anigram单词 | Hash

    Input示例 5 add dad bad cad did 3 add cac dda Output示例 1 0 2 题意:一系列字符串,查询字符串S,能通过其他字符串交换串内字符顺序得到的字符串个数 ...

  2. Android中Handler导致的内存泄露

    http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html Consider the follo ...

  3. Android通知栏介绍与适配总结

    由于历史原因,Android在发布之初对通知栏Notification的设计相当简单,而如今面对各式各样的通知栏玩法,谷歌也不得不对其进行更新迭代调整,增加新功能的同时,也在不断地改变样式,试图迎合更 ...

  4. Elements in iteration expect to have 'v-bind:key' directives.

    code->首选项->设置->在搜索框中输入:vetur.validation.template->你懂的

  5. 【HMOI】小C的填数游戏 DP+线段树维护

    [题目描述] 一个长为n的序列,每个元素有一个a[i],b[i],a[i]为0||1,每个点和他相邻的两个点分别有两条边,权值为cost1[i],cost2[i],对于每个区间l,r,我们可以给每一个 ...

  6. mysql 之修改初始密码

    转载自:https://www.cnblogs.com/ivictor/p/5142809.html 为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error log中,关于er ...

  7. Coursera课程《Machine Learning》吴恩达课堂笔记

    强烈安利吴恩达老师的<Machine Learning>课程,讲得非常好懂,基本上算是无基础就可以学习的课程. 课程地址 强烈建议在线学习,而不是把视频下载下来看.视频中间可能会有一些问题 ...

  8. 【OneNote】使用线性格式输入数学公式

    在OneNote中按Alt+=,就可以开始输入公式. # 对齐公式数组 可以使用@和&来实现,如 \eqarray(x+1&=2@1+2+3+y&=z@3/x&=6)& ...

  9. 广度优先搜索--POJ迷宫问题

    Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...

  10. python的IDLE界面回退代码语句

    Alt+P回退到IDLE中之前输入的代码语句 Alt+N可以移至下一个代码语句