需求:对double数据类型的值进行保留两位数小数点的操作
问题:报异常Could not write JSON: For input string: "15,012.69",当整数位是三位数的时候是正确的,大于三位数的时候就会产生异常。
原因:NumberFormat默认会把达到千位数值以分号,进行分割,如果后续做其他操作可能会报错
解决:调用NumberFormat的setGroupingUsed传值为false,控制NumberFormat千位分组,不让他进行分组。
原来的代码:
/**
* 土地面积
**/
@ApiModelProperty("土地面积")
private Double landArea;
transient static NumberFormat nf = NumberFormat.getNumberInstance();
public Double getLandArea() {
if (Objects.nonNull(landArea)) {
nf.setMaximumFractionDigits(2);
return Double.valueOf(nf.format(landArea));
}
return landArea;
}
修改后的代码:
/**
* 土地用途
**/
@ApiModelProperty("土地用途")
private String landUsePurpose;
transient static NumberFormat nf = NumberFormat.getNumberInstance();
public Double getLandArea() {
if (Objects.nonNull(landArea)) {
nf.setMaximumFractionDigits(2);
nf.setGroupingUsed(false);
return Double.valueOf(nf.format(landArea));
}
return landArea;
}
说明:NumberFormat.getInstance()方法获取到了NumberFormat对象,然后调用setMaximumFractionDigtis方法,2表示最大允许保留两位小数,
数值比较小时没有问题,但是数值较大后就出现异常,这是因为NumberFormat默认会把达到千位数值以分号,进行分割。