double和float的区别以及常用数字处理

double和float的区别以及常用数字处理,第1张

区别

1.double是双精度浮点数,内存占8个字节,有效数字16位,范围从10-308到10308 和 -10-308到-10-308,有效小数位15位
float是单精度浮点数,内存占4个字节,有效数字8位,范围从10-38到1038 和 -1038到-10-38,有效小数位6-7位
2.两者处理速度不同,CPU处理float的速度比处理double快。double的精度高,double消耗内存是float的两倍。
3.小数默认是double类型,用float时需要进行强转,或者在小数后加上f。

double d = 2.6;
System.out.println(d);
float f = (float)2.8;
System.out.println(f);
float f1 = 2.8f;
System.out.println(f1);
保留指定小数位数

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。

//注意不要直接使用double d = 3.835,不然得不到我们想要的值
String d = "3.835";
BigDecimal bd = new BigDecimal(d);
double test1 = bd.setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
System.out.println("---直接截断ROUND_DOWN---"+test1);
double test2 = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("---四舍五入ROUND_HALF_UP---"+test2);
double test3 = bd.setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue();
System.out.println("---四舍五入(保留位后一位是5舍弃)ROUND_HALF_DOWN---"+test3);
double test4 = bd.setScale(2, BigDecimal.ROUND_UP).doubleValue();
System.out.println("---直接进位ROUND_UP---"+test4);

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

double dd = 3.8353233;
        DecimalFormat df = new DecimalFormat("#0.00"); // 保留两位小数,四舍五入
        System.out.println("保留两位小数,四舍五入:" + df.format(dd));
        
DecimalFormat df= new DecimalFormat("#.######");// 精确到小数点后6位
加减乘除
//注意参数,string参数和double参数计算的结果精度是不同的,String类型结果会和参数位数保持一致
System.out.println("加"+(new BigDecimal("3.833").add(new BigDecimal("4.833"))).toString());//加8.666
System.out.println("加"+(new BigDecimal(3.833).add(new BigDecimal(4.833))).toString());//加8.6660000000000003694822225952520966529846191406250
System.out.println("减"+(new BigDecimal("3.833").subtract(new BigDecimal("4.83"))).toString());//减-0.997
System.out.println("乘"+(new BigDecimal("3.833").multiply(new BigDecimal("4.83"))).toString());//乘18.51339
//如果抛出ArithmeticException异常,可以指定舍入模式来解决,常用ROUND_HALF_UP四舍五入
System.out.println("除"+(new BigDecimal("1000").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP)).toString());//除333.33
取最大最小值
System.out.println("获取两者的最大者:"+Math.max(12.556,48.8));
System.out.println("获取两者的最小者:"+Math.min(12.556,48.8));


<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.3.10</version>
</dependency>
//参数可以为数组,指定比较器,int,long,double等
ArrayUtil.min(12.556,48.8);
ArrayUtil.max(12.556,48.8,788.88);

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/728078.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存