关于DecimalFormat的使用

关于DecimalFormat的使用

在EasyExcel读取文件的过程中, 发现有一个NumberFormat注解, 该注解主要是在读取excel时对数字进行格式化处理数据, 查询得知,该功能参考的是DecimalFormat, 也是jdk中提供的数字格式转换类.

1 介绍

在easyexcel的jar包中, 有两个注解 Numbermat和DateTimeFormat.

1 Numbermat注解中引用自DecimalFormat类.

DecimalFormat类是jdk中java.text.包下的一个具体子类, 用于格式化十进制数字. 其抽象父类是NumberFormat, 其作用于格式化和解析任何区域设置的数字, 继承于公共父类Format.

2 DateTimeFormat注解引用自SimpleDateFormat类

SimpleDateFormat也是jdk中java.text.包下的一个具体子类,其抽象父类是DateFormat,继承于公共父类Format.

DecimalFormat 包含一个模式(RoundingMode,舍入模式进行格式化, 默认的是HALF_EVEN) 和一组符号.

2 语法

符号位置本地化说明
0数字阿拉伯数字
#数字阿拉伯数字如果不存在就显示为空
.数字小数分隔符或货币小数分隔符
-数字减号
,数字分组分隔符
E数字分割科学技术法中的尾数和指数。在前缀和后缀中无需添加引号
;子模式边界分隔正数和负数子模式
%前缀或后缀乘以100并显示为百分数
/u2030前缀或后缀乘以1000并显示为千分数
¤ (\u00A4)前缀或后缀货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符
前缀或后缀用于在前缀或或后缀中为特殊字符加引号,例如 “‘#’#” 将 123 格式化为 “#123”。要创建单引号本身,请连续使用两个单引号:“# o’'clock”

3 案例

public class MyDecimalFormatDemo {
    public static void main(String[] args) {
        // 金额转千分位,##0.00 保留两位小数
        DecimalFormat format = new DecimalFormat(",##0.00");
        // 设置舍入模式  四舍五入
        format.setRoundingMode(RoundingMode.HALF_UP);
        System.out.println(format.format(new BigDecimal("12000.345")));
        System.out.println("---------------------------------");


        DecimalFormat format2 = new DecimalFormat("#.##");
        // 设置舍入模式  四舍五入
        format2.setRoundingMode(RoundingMode.HALF_UP);
        System.out.println(format2.format(new BigDecimal("12000.345")));
        System.out.println(format2.format(new BigDecimal("12000.304")));
        System.out.println("---------------------------------");

        DecimalFormat format3 = new DecimalFormat("0.00");
        // 设置舍入模式  四舍五入
        format3.setRoundingMode(RoundingMode.HALF_UP);
        System.out.println(format3.format(new BigDecimal("12000.345")));
        System.out.println(format3.format(new BigDecimal("12000.304")));
    }
    
    /*   
    运行结果:
    12,000.35
    ---------------------------------
    12000.35
    12000.3
    ---------------------------------
    12000.35
    12000.30
    
    */
}

4 拓展

1 在EasyExcel中,NumberFormat注解, 也是用于读取excel时, 进行数字格式转换, 其中value值默认为空, 舍入模式默认为RoundingMode.HALF_UP.

如可直接设置参数@NumberFormat(“0.00”), 保留两位小时

    @NumberFormat("0.00")
	@ExcelProperty(value = "付款金额")
    private String payMoney;

2 在BigDecimal字段想要添加不为空的校验时, 不能直接使用@NotEmpty注解,因其不支持该注解校验, 可通过@NotNull和@DecimalMin组合校验.

反例:

	// 错误
	@NotEmpty()
    private BigDecimal payMoney;

正例:

	// 错误
	@NotNull()
	@DecimalMin("0")
    private BigDecimal payMoney;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值