Java 数字格式化
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");