保留两位小数四种方法: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
- 保留两位小数四种方法:String.format(),BigDecimal.setScale(),NumberFormat.format(),DecimalFormat.format()详解
- 保留小数:java DecimalFormat format 方法的使用
- 保留小数:java DecimalFormat format 方法的使用
- 保留小数:java DecimalFormat format 方法的使用
- java保留小数--四舍五入-- String.format()
- String.format()方法详解
- DecimalFormat format 方法
- DecimalFormat(保留两位小数)
- DecimalFormat保留两位小数
- BigDecimal 保留两位小数
- java String.Format详解
- String.format详解
- String.format详解
- String.format()【示例详解】
- String.format详解
- String.format详解
- Java String.format详解
- JAVA String.format详解
- Linux学习笔记(一):指令
- node.js events(EventEmitter对象)
- Edit Ubuntu 16.04 bootloader GRUB
- TreeSet的带comparator的构造方法
- ChannelNotifyOutputData
- 保留两位小数四种方法:String.format(),BigDecimal.setScale(),NumberFormat.format(),DecimalFormat.format()详解
- NGUI自动设置 Panel 深度、自动设置UIWidget(Sprite/Label等)深度(按照Hierarchy 顺序从上到下 Depth 递增)
- RSA加密解密样例
- Leetcode 391. Perfect Rectangle
- 安全算法梳理
- 393. UTF-8 Validation
- 137. Single Number II
- UVA644 - Immediate Decodability
- HTML5快速入门(四)—— JavaScript