保留两位小数四种方法:String.format(),BigDecimal.setScale(),NumberFormat.format(),DecimalFormat.format()详解

来源:互联网 发布:管家婆软件安装步骤 编辑:程序博客网 时间:2024/04/29 09:53

废话不多说,直接上代码,注释比较详细,比较多,没有时间仔细看的可以直接看代码。

package test;import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.NumberFormat;public class 保留两位小数四种方法 {    public static void main(String args[]) {        double x = 123.456789;        /*         * 方法一:String 最容易想到,简单强大         *          * String.format()用法         *          * 1、转换符          * %s: 字符串类型,如:"ljq"          * %b: 布尔类型,如:true          * %d: 整数类型(十进制),如:99          * %f:浮点类型,如:99.99          * %%: 百分比类型,如:%          * %n: 换行符         *          * 2、常见日期时间格式化          * c: 包括全部日期和时间信息 星期六 十月 27 14:21:20 CST 2007          * F:"年-月-日"格式,如:2007-10-27          * D: "月/日/年"格式,如:10/27/07          * r: "HH:MM:SS PM"格式(12时制),如:02:25:51 下午         * T: "HH:MM:SS"格式(24时制),如:14:28:16         * R: "HH:MM"格式(24时制),如:14:28         *          * 3、格式化日期字符串          * b或者h: 月份简称,如: 中:十月  英:Oct         * B: 月份全称,如: 中:十月  英:October         * a: 星期的简称,如 :中:星期六  英:Sat         * A: 星期的全称,如: 中:星期六  英:Saturday         * C: 年的前两位数字(不足两位前面补0),如:20          * y: 年的后两位数字(不足两位前面补0),如:07          * Y:4位数字的年份(不足4位前面补0),如:2007          * j: 一年中的天数(即年的第几天),如:300          * m:两位数字的月份(不足两位前面补0),如:10          * d: 两位数字的日(不足两位前面补0),如:27          * e: 月份的日(前面不补0),如:5         *          * 4、格式化时间字符串         *  H: 2位数字24时制的小时(不足2位前面补0),如:15          *  I:2位数字12时制的小时(不足2位前面补0),如:03          *  k: 2位数字24时制的小时(前面不补0),如:15          *  l:2位数字12时制的小时(前面不补0),如:3          *  M: 2位数字的分钟(不足2位前面补0),如:03          *  S:2位数字的秒(不足2位前面补0),如:09          *  L: 3位数字的毫秒(不足3位前面补0),如:015          *  N:9位数字的毫秒数(不足9位前面补0),如:562000000         *  p: 小写字母的上午或下午标记,如: 中:下午  英:pm         *  z: 相对于GMT的RFC822时区的偏移量,如:+0800          *  Z: 时区缩写字符串,如:CST          *  s: 1970-1-1 00:00:00  到现在所经过的秒数,如:1193468128          *  Q: 1970-1-1 00:00:00   到现在所经过的毫秒数,如:1193468128984         */         String temp1 = String.format("%.2f", x);         double result1 = Double.parseDouble(temp1);         System.out.println(result1);        /*         * 方法二:BigDecimal         *          * 核心方法详解:         * BigDecimal.setScale()方法用于格式化小数点 setScale(1)表示保留一位小数,默认用四舍五入方式         * setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3         * setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4         * setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4         * setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍         */        BigDecimal mBigDecimal = new BigDecimal(x);        BigDecimal result2 = mBigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);        System.out.println(result2);        /*         * 方法三:NumberFormat NumberFormat 表示数字的格式化类,可以按照本地的风格习惯进行数字的显示         * MessageFormat 、DateFormat 、NumberFormat 是 Format 三个常用的子类         *          * 获取该实例的几个方法 getInstance(),返回当前缺省语言环境的缺省数值格式。         * getCurrencyInstance()返回当前缺省语言环境的通用格式 getNumberInstance()         * 返回当前缺省语言环境的通用数值格式 getPercentInstance() 返回当前缺省语言环境的百分比格式         *          * setMaximumFractionDigits(int) 设置数值的小数部分允许的最大位数。         * setMaximumIntegerDigits(int) 设置数值的整数部分允许的最大位数。         * setMinimumFractionDigits(int) 设置数值的小数部分允许的最小位数。         * setMinimumIntegerDigits(int) 设置数值的整数部分允许的最小位数.         */          NumberFormat mNumberFormat = NumberFormat.getInstance();          mNumberFormat.setMaximumFractionDigits(2);          String temp2 = mNumberFormat.format(x);          double result3 = Double.parseDouble(temp2);          System.out.println(result3);        /*         * 方法四:DecimalFormat         * DecimalFormat 是 NumberFormat 的一个具体子类,比NumberFormat更灵活,用于格式化十进制数字         *          * DecimalFormat 包含一个模式 和一组符号 符号含义:         * 0 一个数字          * # 一个数字不包括 0          * . 小数的分隔符的占位符          * , 分组分隔符的占位符          * ;分隔格式。         * - 缺省负数前缀。         * % 乘以 100 和作为百分比显示          * ? 乘以 1000和作为千进制货币符显示;用货币符号代替;如果双写,用 国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代 替十进制分隔符。         *  X前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。         */        DecimalFormat mDecimalFormat = new DecimalFormat("0.00");        String temp3 = mDecimalFormat.format(x);        double result4 = Double.parseDouble(temp3);        System.out.println(result4);        /*         * 最后的补充:         * 如果只是打印出来,不用保存到变量中,可用System.out.printf(String format, Object args)方法         *          * "%"表示进行格式化输出,"%"之后的内容为格式的定义         * "f"表示格式化输出浮点数         * +"表示输出的数带正负号         * "-"表示输出的数左对齐(默认为右对齐)         * "+-"表示输出的数带正负号且左对齐         * "d"表示输出十进制整数         * "o"表示输出八进制整数         * "x"表示输出十六进制整数         * "#x"表示输出带有十六进制标志的整数         * "#o"表示输出带有八进制标志的整数         * "s"表示输出字符串         */        int d = 654321;        double f = 12345.6789;        String str = "hello world!";        System.out.printf("%f", f);        System.out.println();        // "9.2"中的9表示输出的长度,2表示小数点后的位数。        System.out.printf("%9.2f", f);        System.out.println();        System.out.printf("%+9.2f", f);        System.out.println();        System.out.printf("%-9.4f", f);        System.out.println();        System.out.printf("%+-9.3f", f);        System.out.println();        System.out.printf("%d", d);        System.out.println();        System.out.printf("%o", d);        System.out.println();        System.out.printf("%x", d);        System.out.println();        System.out.printf("%#x", d);        System.out.println();        System.out.printf("%#o", d);        System.out.println();        System.out.printf("%s", str);        System.out.println();        // 可以输出多个变量,注意顺序。        System.out.printf("输出一个浮点数:%f,一个整数:%d,一个字符串:%s", f, d, str);        System.out.println();        // "X$"表示第几个变量。        System.out.printf("字符串:%2$s,%1$d的十六进制数:%1$#x", d, str);    }}
0 0
原创粉丝点击