Double保留指定小数位数的五种方法

方法一、

	// 方法一
	public void test1() {
		double d = 0.3456789;
		BigDecimal bd = new BigDecimal(d);
		double test1 = bd.setScale(2, BigDecimal.ROUND_DOWN).doubleValue(); // 保留两位小数,不四舍五入(可选舍入模式)
		System.out.println("方法一:" + test1); //0.34
	}

BigDecimal

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。

参数说明:

 setScale(newScale, roundingMode) 
 newScale:要返回的 BigDecimal 值的标度。
 roundingMode:要应用的舍入模式。 
 返回:一个 BigDecimal,其标度为指定值,其非标度值可以通过此 BigDecimal的非标度值乘以或除以十的适当次幂来确定。	

舍入模式:

 ROUND_CEILING  接近正无穷大的舍入模式。 
 ROUND_DOWN  从不对舍弃部分前面的数字加1,即截短。
 ROUND_FLOOR  接近负无穷大的舍入模式。
 ROUND_HALF_DOWN  向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。			                           					                                                                 
 ROUND_HALF_EVEN  向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。    
 ROUND_HALF_UP  向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。 
 ROUND_UNNECESSARY  断言请求的操作具有精确的结果,因此不需要舍入(如果对获得精确结果的操作指定此舍入模
 式,则抛出ArithmeticException)。
 ROUND_UP  始终对非舍弃部分前面的数字加1。

方法二、

	// 方法二
	public void test2() {
		double d = 0.3456789;
		// #.00 表示两位小数
		DecimalFormat df = new DecimalFormat("#0.00"); // 保留两位小数,四舍五入
		System.out.println("方法二:" + df.format(d)); //0.35
	}

DecimalFormat

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。

参数说明:

0 阿拉伯数字 
# 阿拉伯数字如果不存在就显示为空 
. 小数分隔符或货币小数分隔符
- 减号
, 分组分隔符 
E 分割科学技术法中的尾数和指数。在前缀和后缀中无需添加引号 
; 分隔正数和负数子模式
% 乘以100并显示为百分数 
\u2030 乘以1000并显示为千分数
\u00A4 货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使    	
用小数分隔符 
' 用于在前缀或或后缀中为特殊字符加引号,例如 "'#'#" 将 123 格式化为 "#123"。要创建单引号本身,请连续使用两个单引号: "# o''clock"
	 
1.整数:若是n个0,就从个位开始向高位填充,如果有值就是原来的值,没有就填充0。
若都是#,没有实际意义,不管是几个#,最后的结果都是原来的整数。0和#配合使用,只能是"##00",不能是"00##",就是#在前0在后。
实现是上面的合集。
2.小数:是可以保留小数点后几位的(几个0后或几个#)。 若n个0,就是保留n位小数,小数不足的部分用0填充。
若n个#,就是保留n位小数,小数不足部分没有就是没有。

方法三、

	// 方法三
	public void test3() {
		double d = 0.3456789;
		// %.2f %.表示 小数点前任意位数 2 表示两位小数 格式后的结果为f 表示浮点型
		System.out.println("方法三:" + String.format("%.2f", d));// 保留两位小数,四舍五入  //0.35	
	}

String.format

字符串常规类型格式化的两种重载方式
format(String format, Object… args) 使用当前本地区域对象(locale.getDefault())格式化字符串
format(Locale locale, String format, Object… args) 自定义本地区域对象格式化字符串

方法四、

	// 方法四
	public void test4() {		
		double d = 0.3456789;
		NumberFormat nf = NumberFormat.getNumberInstance();
		nf.setMaximumFractionDigits(2); // 保留两位小数,四舍五入
		System.out.println("方法四:" + nf.format(d)); //0.35
	}

NumberFormat

可用于格式化和解析任何语言环境的数值。

参数说明:

NumberFormat.getInstance 返回当前缺省语言环境的缺省数值格式;
NumberFormat.getCurrencyInstance 返回当前缺省语言环境的通用格式。
NumberFormat.getPercentInstance 返回当前缺省语言环境的百分比格式。
NumberFormat.getNumberInstance 返回指定语言环境的通用数值格式。
setMinimumFractionDigits() 设置数值的小数部分允许的最小位数,不足的位数以0补位,超出的话按实际位数输出。
setMaximumFractionDigits() 设置数值的小数部分允许的最大位数,不足不补0。
setMaximumIntegerDigits() 设置数值的整数部分允许的最大位数。
setMinimumIntegerDigits() 设置数值的整数部分允许的最小位数。

方法五、

	// 方法五
	public void test5() {
		double d = 0.3456789;
		// 保留两位小数,四舍五入
		System.out.println("方法五:" + (double) Math.round(d * 100) / 100.0); //0.35
	}

round()

round()方法可把一个数字舍入为最接近的整数。

参数说明:

如果参数的小数部分大于0.5,则舍入到相邻的绝对值更大的整数。
如果参数的小数部分小于0.5,则舍入到相邻的绝对值更小的整数。
如果参数的小数部分恰好等于0.5,则舍入到相邻的在正无穷(+∞)方向上的整数。 
例如,3.5 将舍入为 4.0,而 -3.5 将舍入为 -3.0。
  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值