Java浮点类型的格式化
概述
基于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.222.
00和#的用法是相近的,却又略有不同;不同之处在于:
a. 0限制整数部分最少出现的位数;不足这个位数的,前面补0
data:22.26
pattern:"0,000.00"
result:0,022.26b. 0限制小数部分出现的位数;不足补0,多的舍入
data:22.26
-----------------
pattern:"00.000"
result:22.260
-----------------
pattern:"00.0"
result:22.33. E
科学表示法,尾数和指数的分隔符。具体内容见后文。
关于前缀、后缀
除\uFFFE, \uFFFF和特殊字符之外的任意Unicode字符,都可以作为前缀、后缀;有四个特殊的字符:
1. %
将数字乘以100data:1234.567
pattern:",###.##%"
result:123,456.7%2. \u2030
将数字乘以1000data:1234.567
pattern:",###.##\u2030"
result:1,234,567‰3. ¤(\u00A4)
本地化货币符号,如果连续出现两次,代表货币符号的国际代号。data:1234.567
---------------------
pattern:",###.##¤"
result:1,234.57¥
---------------------
pattern:",###.##¤¤"
result:1,234.57CNY4. '
用于引用特殊的字符,作为前缀或后缀。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浮点类型的格式化的更多相关文章
- java浮点类型计算
java浮点类型需要采用java.math.*这个工具包,这样的计算结果才是我们想要的.呵呵 import java.math.BigDecimal; import java.text.NumberF ...
- java 基础 浮点类型
1.浮点类型用于表示小数的数据类型. 2.浮点数原理:也就是二进制科学计数法. 3.Java的浮点类型有float和double两种. 4.Java默认浮点类型计算的结果是double类型,字面量也是 ...
- Java中浮点类型的精度问题 double float
要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法与浮点数的结构组成.因为机器只认识01,你想表示小数,你要机器认识小数点这个东西,必须采用某种方法.比如,简单点的,float四个字 ...
- Java基础扫盲系列(二)—— Java中BigDecimal和浮点类型
一直以来我几乎未使用过BigDecimal类型,只有在DB中涉及到金额字段时听说要用Decimal类型,但是今天再项目代码中看到使用BigDecimal表示贷款金额. 本篇文章不是介绍BigDecim ...
- java.lang.NumberFormatException: Infinite or NaN原因之浮点类型除数为0结果探究
背景 在对Double类型的数据进行计算操作,将结果转化为BigDecimal时抛出了下面的异常,进行了Debug才发现了问题原因,同时也暴露出了自己在一些基础知识上还有些欠缺. Exception ...
- JAVA字符串与整形、浮点类型之间的相互转换总结
1.字符串转化为整形.浮点类型 String s = "100"; //方法一 int a = Integer.parseInt(String s); Long.parseLong ...
- 【转】Java 中字符串的格式化
原文网址:http://blog.csdn.net/aimartt/article/details/8307237 参考资料:JDK API 1.6.0 中文文档 1.格式字符串语法 产生格式化输出的 ...
- Java 中字符串的格式化
1.格式字符串语法 产生格式化输出的每个方法都需要格式字符串 和参数列表.格式字符串是一个String,它可以包含固定文本以及一个或多个嵌入的格式说明符.请考虑以下示例: Calendar c = C ...
- 转!!Java代码规范、格式化和checkstyle检查配置文档
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
随机推荐
- 【C++ STL】Vector
1.结构 vector模塑出一个动态数组,因此,它本身是“将元素置于动态数组中加以管理”的一个抽象概念.vector将其元素复制到内部的dynamic array中.元素之间总存在某种顺序,所以vec ...
- Linux之防火墙与端口
1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放.下面是命令实现: iptables -P INPUT DROPiptables -P FORWARD DROPiptable ...
- Linux LVM分区管理、扩展
一.LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写.LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它 ...
- uoj308 【UNR #2】UOJ拯救计划
传送门:http://uoj.ac/problem/308 [题解] 考虑枚举用了$i$所学校,那么贡献为${k \choose i} * cnt * i!$ 意思是从$k$所选$i$所出来染色,$c ...
- Vue 键盘事件
Vue2键盘事件:keydown/keyup... 1.使用 <!DOCTYPE html> <html> <head> <title></tit ...
- bzoj 1084 DP
首先对于m==1的情况非常容易处理(其实这儿因为边界我错了好久...),直接DP就好了,设f[i][k]为这个矩阵前i个选k个矩阵的最大和,那么f[i][k]=max(f[j][k-1]+sum[j+ ...
- bufferd对象详解
使用buffer类处理二进制数据 在客户端javascript脚本代码中,对于二进制数据并没有提供一个很好的支持.然后在nodejs中需要处理像TCP流或文件流时,必须要处理二进制数据.因此在node ...
- fundamentals of the jQuery library
1.why is jquery Only 32kB minified and gzipped. Can also be included as an AMD module Supports CSS3 ...
- 广度优先算法(BFS)与深度优先算法(DFS)
一.广度优先算法BFS(Breadth First Search) 基本实现思想 (1)顶点v入队列. (2)当队列非空时则继续执行,否则算法结束. (3)出队列取得队头顶点v: (4)查找顶点v的所 ...
- MVC自定义路由实现URL重写,SEO优化
//App_Start-RouteConfig.cs public class RouteConfig { public static void RegisterRoutes(RouteCollect ...