学而实习之 不亦乐乎

Java 数字格式化

2020-08-02 10:59:13

Java 数字格式化

一、使用NumberFormat

double x = 23.5455; 
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2); 
String s= nf.format(x); 使用 DecimalFormat

二、使用DecimalFormat

2.1 对double值进行四舍五入,并保留小数位

import java.text.DecimalFormat;  
DecimalFormat df = new DecimalFormat("######0.00");   

double d1 = 3.23456  
double d2 = 0.0;
double d3 = 2.0;
df.format(d1); 
df.format(d2); 
df.format(d3); 

结果分别为: 
3.23
0.00 
2.00

2.2 如果不需要四舍五入,只需要截断的话

double d = 3.1356
DecimalFormat df = new DecimalFormat("#0.00");
df.setRoundingMode(RoundingMode.DOWN);
df.format();

注意:
需要注意占位符的使用。如下:
DecimalFormat("#,###.00")丢失个位数0,如 0.98 格式化之后就成了 .98 (这种情况在处理类似 11.98 ,111.98 时没有问题)。
这个问题是因为占位符 "#" 和 "0" 的使用导致的,需要注意在 DecimalFormat() 函数中 "0" 和 "#" 的作用及区别。
(1) "#" 和 "0" 在数字位数大于占占位符时,都会将小数部分四舍五入。
(2) "#" 和 "0" 在数字位数小于占占位符时,"#"会将有效值部分前面和后面的零去掉(如:"####.####"作用于 12.34时,输出12.34,而不会用零来补充),而0则会将少的位数用0补充上(如:"0000.0000"作用于12.34时,输出 0012.3400)。

三、使用 BigDecimal

double f = 111231.5585;  
BigDecimal b = new BigDecimal(f);  
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();


四、使用String.format()

double d = 3.1415926;
String result = String.format("%.2f");