Java的小数 保留n小数 小数的四舍五入 不四舍五入的保留小数 小数 小数的格式化 小数四舍五入的几种方式

首先看完这篇文章你可以学会,

  1. 在Java中如何对小数进行保留n位小数
  2. 四舍五入和非四舍五入
  3. 常见保留n位小数的方式
  4. 以及Java中double和float到底可以保留到小数点后几位

下面开始正文

在Java中表示小数的有double和float
分别占8个和4个字节

主要的内容都写在代码里了

import java.math.RoundingMode;
import java.text.NumberFormat;

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double d = 0.1234567890123456789;
		float f = (float) 0.123456789;
		float a = 2;
		float b = 3;
		int n = 10;
		/**
		 * double 占8个字节 float 占4个字节
		 */
		System.out.println("double初始值\t" + d);
		System.out.println("float初始值\t" + f);
		System.out.println("float a="+a);
		System.out.println("float b="+b);
		System.out.println("a/b=\t"+a / b);
		/**
		 *	 如何保留n位小数 当这个n不是很大的时候,是有效(下面的方法是有效的)
		 *	 比如一个double类型的数字,整数部分和小数部分是存在一种制约的关系的,整数部分的位数很长,小数部分的位数就会比较短
		 *		 double和float能保留小数点后多少位,也是不确定的
		 * 
		 * double类型可以保存的10进制的最大的位数是从第一个非0数字开始计数,可以有17位(小数点不算位数)
		 * float类型可以保存的10进制的最大的位数是从第一个非0数字开始计数,可以有8位(小数点不算位数)
		 * 	为什么结果是这样的,这就需要计算机组成原理的知识,数字在计算机中存放的当然是以二进制表示的了(只有0和1) 以double类型举例
		 * double是8字节,就是64位 这64位二进制,有一位表示数符(表示正负,0表示正,1表示负)
		 *	 剩下的位数,一部分表示阶符(二进制表示,尾数乘以2的多少次方) 一部分表示尾数(二进制表示) 如果不懂可以百度一下IEE754是什么 原理都是这个原理
		 */
		// 四舍五入
		/**
		 * print() format()
		 * 	这种方式的n可以很大
		 */
		System.out.println("四舍五入保留n位小数");
		System.out.printf("double四舍五入printf \t" + "%.5f\n", d);
		System.out.printf("float四舍五入printf \t" + "%.5f\n", f);
		System.out.printf("拼接n的print\t"+"%." + n + "f"+"\n", a / b);

		/**
		 * 创建NumberFormat对象 setMaximumFractionDigits(int
		 * newValue);//最多保留newValue位小数,超过两位部分的自动舍去
		 * setMinimumFractionDigits(newValue);//至少保留newValue位小数,不足两位自动补0,
		 * 	这种方式的n也可以很大
		 */
		NumberFormat nf = NumberFormat.getNumberInstance();
		nf.setMaximumFractionDigits(10);//200都是可以的
		nf.setMinimumFractionDigits(10);//200都是可以的
		/**
		 * 设置四舍五入的模式setRoundingMode()
		 * 括号内的参数是类RoundingMode中的静态属性,RoundingMode类就是为了确定四舍五入的模式的
		 */
		nf.setRoundingMode(RoundingMode.FLOOR);// 表示不需要四舍五入,直接舍
		System.out.println("double非四舍五入NumberFormat \t" + nf.format(d));
		System.out.println("float非四舍五入NumberFormat \t" + nf.format(f));
		System.out.println("nf.format()方式可以保留n位\t"+nf.format(a / b));

		// 转换成string
		String s1 = nf.format(d);
		String s2 = String.valueOf(nf.format(d));
		String s3 = String.format("%.2f", d);// 2表示保留2位小数
		Double valueOf = Double.valueOf(String.format("%.30f", d));// 3表示保留3位小数
		System.out.println("String.format()方式\t" + s3);// 四舍五入
		System.out.println("double四舍五入转string类型后转double类型\t" + valueOf);

		// 保留n位小数
		/**
		 * 	保留10/3结果的后20位小数 round()返回四舍五入的整数 pow(a,b)a的b次方
		 * 		这种方法当n比较大时,结果就是错误的
		 */
		
		int a1 = 10;
		System.out.println("还是不要这么写了\t"+Math.round(a / b * Math.pow(a1, n)) / Math.pow(a1, n));

	}

}

运行结果截图
在这里插入图片描述
难道您还不点个赞

Math类中的round()方法
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值