废话不多说,直接上代码,注释比较详细,比较多,没有时间仔细看的可以直接看代码。
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);
}
}
版权声明:本文为xhw035原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。