下面记录了几种Java中处理数字的方式,主要用于对金钱的处理。

DecimalFormat

DecimalFormat("#.00") # 表示整数,小数点后有几个 0 就保留几位小数

double demoValue = 1463.286;
DecimalFormat df = new DecimalFormat(".00");
// 效果一样
DecimalFormat df2 = new DecimalFormat("#.00");
System.out.println(df.format(demoValue));
System.out.println(df2.format(demoValue));

String.format

%.2f 2代表保留小数位数

double demoValue = 1463.286;
System.out.println(String.format("%.2f", demoValue));

BigDecimal

setScale(2, BigDecimal.ROUND_HALF_UP)

参数1:保留小数位数

参数2:处理方式,四舍五入

示例:

double demoValue = 1463.286;
BigDecimal bg = new BigDecimal(demoValue);、
// 科学计数法
double d3 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
// 不使用科学计数法
String d4 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString();
System.out.println(d3);
System.out.println(d4);

NumberFormat

setMaximumFractionDigits(2)

参数1:保留小数位数

示例:

double demoValue = 1463.286;
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(demoValue));

需要留意的地方

  1. 对于 0 的处理最好用 String.format 会输出 0.00 ,BigDecimal 并选择输出原始数值也可以

  2. 对于大数字使用 BigDecimal 要注意直接输出的 double 值会表示为科学计数法

  3. NumberFormat 对 0 直接输出 0 ,但会对千位加处理

  4. 不推荐使用 DecimalFormat 它会输出 .00 整数部分被直接丢掉了

  5. 其实算法也可以处理,但是太Low了

1、 str.split(String regex);

public String[] split (String regex)

2、 str.replaceAll(String regex, String replacement);

str.replaceFirst(String regex,String replacement)

public String replaceAll(String regex, String replacement)

3、 str.matches(String regex)

public boolean matches(String regex)

下面可以用来去除空格,包括字符串中的空格和前后两端的空格

正则表达式

1、 表示空格 “ \s”, “[ ]”, “[\s]”

表示多个空格 “\s+”, “[ ]+”, “[\s]+”

2、 表示数字 “\d”, “[\d]”, “[0-9]”

表示多个数字,同理,在后面加上”+”

可以用来添加空格

%-15s 左对齐 后面加空格 总共15个字符长度

%15s 右对齐 前面加空格 总共15个字符长度