必威体育Betway必威体育官网
当前位置:首页 > IT技术

深入理解DecimalFormat.format()方法

时间:2019-10-28 07:15:46来源:IT技术作者:seo实验室小编阅读:75次「手机版」
 

decimalformat

问题

今天在编程时,产品经理突然和我说,把所有的金额保留两位小数后,传递到前台。一时间,不知道该怎么做,于是,通过百度百科,查找到了decimalformat这个类,这就是格式化数据的类。但在使用这个类时,出现了错误,错误如下:

这里写图片描述

通过谷歌翻译得到:无法将给定对象格式化为数字

重点不是这句话,而是为什么无法将给定的对象格式化数字。

这里写图片描述

如果将String类型转化为bigdecimal类型的,就不会报错:

这里写图片描述

为什么会这样呢?

解释问题

通过查看源码得出,DecimalFormat继承了抽象类NumberFormat,NumberFormat继承了抽象类Format,里面各有format方法,我们来看看Format类中的format方法:

public abstract StringBuffer format(Object obj,
                    StringBuffer toAPPendTo,
                    fieldPosition pos);

这是个未实现的方法,我们点击idea左边的向下箭头,会出现让你惊讶的一幕:

这里写图片描述

实现该方法的类有很多,而我们今天所说的就DecimalFormat,我们来看看它的实现方法:

 @Override
    public final StringBuffer format(Object number,
                                     StringBuffer toappendTo,
                                     FieldPosition pos) {
        if (number instanceof Long || number instanceof integer ||
                   number instanceof Short || number instanceof Byte ||
                   number instanceof AtomicInteger ||
                   number instanceof AtomicLong ||
                   (number instanceof BigInteger &&
                    ((BigInteger)number).bitLength () < 64)) {
            return format(((Number)number).longValue(), toAppendTo, pos);
        } else if (number instanceof BigDecimal) {
            return format((BigDecimal)number, toAppendTo, pos);
        } else if (number instanceof BigInteger) {
            return format((BigInteger)number, toAppendTo, pos);
        } else if (number instanceof Number) {
            return format(((Number)number).doubleValue(), toAppendTo, pos);
        } else {
            throw new illegalargumentException("cannot format given Object as a Number");
        }
    }

你会发现,我们居然找到了上面报错文字: throw new IllegalArgumentException(“Cannot format given Object as a Number“);

如果你知道instanceof 的话,你就会明白这是该对象是否是某类的实例化对象。这里的有很多包装类,就没有String类和自定义类型,因而,就会出现了错误。所以,它没办法解释格式化String类型的数据。

遇到报错别紧张,查看源码来解析,建议大家使用idea

文章最后发布于: 2018-08-23 14:39:46

相关阅读

excel解决不能求和的方法步骤详解

Excel的自动求和功能非常实用,被广泛应用。有时我们会遇到Excel无法自动求和、或Excel自动求和数值不对怎么办?下面小编告诉你exce

网站如何优化排名 方法有哪些?

一个网站成功建立以后,还有一个很大的愿景,那就想网站在成功建立并上线以后,能够拥有很好的排名,面对这样的问题时,网站如何优化排名?下

2个方法论,系统掌握产品功能改进方案

作为一个产品经理,肯定会遇到老板让你改进产品功能的问题,但是要改什么、怎么改都不明确。这时要怎么入手呢?有没有一些通用的套路呢

qq等级达人点亮图标方法

QQ等级达人图标是等级加速较快的QQ用户的尊贵标识。点亮QQ等级达人图标,标志着您正在加速升级QQ等级,向好友彰显您的等级加速成就

matlab自定义函数的几种方法

1、函数文件+调用命令文件:需单独定义一个自定义函数的M文件;2、函数文件+子函数:定义一个具有多个自定义函数的M文件;3、Inline:无

分享到:

栏目导航

推荐阅读

热门阅读