一. 概述
在日常开发中, 有些场景我们需要对数字格式进行处理, 例如小数位数, 价格, 百分数等, 下面介绍一下java自带的工具类NumberFormat
- 推荐文章: # Java NumberFormat
二. 示例说明
2.1 数字按不同国家设置显示格式
import java.text.NumberFormat;
import java.util.Locale;
public class FormattingNumbers {
public static void main(String[] args) {
double n = 1240.35;
// 获取美国的数字格式
NumberFormat nf = NumberFormat.getInstance(new Locale("en", "US"));
String val = nf.format(n);
System.out.println(val);
// 获取斯洛伐克的数字格式
NumberFormat nf2 = NumberFormat.getInstance(new Locale("sk", "SK"));
String val2 = nf2.format(n);
System.out.println(val2);
// 获取丹麦的数字格式
NumberFormat nf3 = NumberFormat.getInstance(new Locale("da", "DK"));
String val3 = nf3.format(n);
System.out.println(val3);
}
}
输出结果
1,240.35
1 240,35
1.240,35
2.2 控制小数位数
import java.text.NumberFormat;
import java.util.Locale;
public class FractionDigits {
public static void main(String[] args) {
double val1 = 4.5678934;
double val2 = 2.3;
NumberFormat nf1 = NumberFormat.getInstance(new Locale("zh", "CN"));
NumberFormat nf2 = NumberFormat.getInstance(new Locale("zh", "CN"));
// 设置小数最少位数, 不够补零
nf1.setMinimumFractionDigits(2);
// 设置小数最大位数, 位数超出根据策略进行取舍, 默认四舍五入
nf1.setMaximumFractionDigits(4);
nf2.setMaximumFractionDigits(4);
// 采取四舍五入策略
nf1.setRoundingMode(RoundingMode.UP);
// 不采取四舍五入策略
nf2.setRoundingMode(RoundingMode.DOWN);
System.out.println(nf1.format(val1));
System.out.println(nf1.format(val2));
System.out.println(nf2.format(val1));
}
}
输出结果
4.5679
2.30
4.5678
附BigDecimal 小数位控制
/**
* 四舍五入保留多少位小数
* @param newScale 保留多少位小数
*/
public static double formatDoubleByScale(double num, int newScale) {
BigDecimal bg = doubleToBigDecimal(num).setScale(newScale, RoundingMode.UP);
return bg.doubleValue();
}
/**
* 不四舍五入保留多少位小数
* @param newScale 保留多少位小数
*/
public static double formatDoubleByScaleN(double num, int newScale) {
BigDecimal bg = doubleToBigDecimal(num).setScale(newScale, RoundingMode.DOWN);
return bg.doubleValue();
}
2.3 格式化百分比
import java.text.NumberFormat;
import java.util.Locale;
public class Percentages {
public static void main(String[] args) {
double num1 = 0.234;
String num2 = "35.5%";
// 获取百分数处理对象
NumberFormat pf = NumberFormat.getPercentInstance(Locale.CHINA);
// 数字转百分数
String format = pf.format(num1);
// 百分数转数字
Double parse = (Double) pf.parse(num2);
System.out.println(format);
System.out.println(parse);
}
}
输出结果
23%
0.355
2.4 格式货币
import java.text.NumberFormat;
import java.util.Locale;
public class Currencies {
public static void main(String[] args) {
int val = 23500;
// 获取美国货币格式
NumberFormat cf1 = NumberFormat.getCurrencyInstance(new Locale("en", "US"));
System.out.println(cf1.format(val));
// 获取斯洛伐克货币格式
NumberFormat cf2 = NumberFormat.getCurrencyInstance(new Locale("sk", "SK"));
System.out.println(cf2.format(val));
// 获取中国货币格式
NumberFormat cf3 = NumberFormat.getCurrencyInstance(new Locale("zh", "CN"));
System.out.println(cf3.format(val));
}
}
输出结果
$23,500.00
23 500,00 €
¥23,500.00
2.5 解析数字
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class ParsingNumbers {
public static void main(String[] args) throws ParseException {
NumberFormat nf = NumberFormat.getInstance(new Locale("sk", "SK"));
Number num = nf.parse("150000,45646");
System.out.println(num.doubleValue());
}
}
输出结果
150000.45646
网友评论