JAVA案例 第二篇:针对大数值取整数和小数、保留几位小数、特定位数的数值、自幂数

该博客详细介绍了JAVA中处理大数值的方法,包括判断是否为整数、取整、取小数、特定位数数值、保留小数位数以及自幂数的计算。通过示例代码展示了BigDecimal类的应用,如stripTrailingZeros()方法用于去除小数点后多余的0,以及如何处理大型数值的幂运算和保留小数位数。
摘要由CSDN通过智能技术生成

简介:

在前面的章节中,我们自定了一个判断大数值是否为整数的方法,今天我们针对这个方法进行展开论述。

我们可以想象一下:既然能够判断一个数值是否为整数,那么就应该有机会将它的整数部分和小数部分分割开来,也就是我们常说的取整(它同时包含了取小数),在我们初学JAVA时,我们常用的方法是强制转换,或者利用BigDecimal.ROUND语句来进行保留0位小数。今天我们用另一个方法来处理,实现取整(取小数)、特定位数的数值、保留几位小数、以及所有自幂数的输出。这个方法是不涉及精度处理的,也没有强制意味。

一、判断数值是否为整数

判断一个数是否为整数的方法有很多,在此我们利用取商取余的方式进行判断,取商、取余的方法我们稍后会进行讲解。

在此我们要考虑一个非常特殊的数字:1,数字1能够整除任何整数,如果不能整除,则可以判定其不是整数。

相应的代码笔者将会以资源的方式进行上传,在此不作累述,仅仅对其进行测试。

	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigDecimal number01 = BigDecimal.valueOf(1.23);

		BigDecimal digitPart01 = number01.remainder(BigDecimal.ONE).stripTrailingZeros();
		BigDecimal intPart01 = number01.subtract(digitPart01).stripTrailingZeros();

		System.out.println("1.23 的整数部分:" + intPart01);
		System.out.println("1.23 的小数部分:" + digitPart01);

		BigDecimal number02 = BigDecimal.valueOf(-21.423);

		BigDecimal digitPart02 = number02.remainder(BigDecimal.ONE).stripTrailingZeros();
		BigDecimal intPart02 = number02.subtract(digitPart02).stripTrailingZeros();

		System.out.println("-21.423 的整数部分:" + intPart02);
		System.out.println("-21.423 的小数部分:" + digitPart02);
	}

运行结果:

1.23 的整数部分:1
1.23 的小数部分:0.23
-21.423 的整数部分:-21
-21.423 的小数部分:-0.423

在此,我们仅仅对小数点进行了“分割”处理,当然,如果计较负数的整数小数部分的取值方法,main()方法中的相应代码则需要修改(比如-1.7,靠近且比-1.7小的整数为-2,则其整数部分为2,小数部分为0.3,需要对其进行减法运算以及绝对值处理,代码则不能这么写)。本方法其实是根据数字1的特性来处理的:1能够整除任何整数,换言之,只要是整数,都能够被1整除,也就是说余数为0。同理我们利用数字2的特性可以判断一个数的奇偶性。

二、取整、取小数

小数点是一个特殊的符号,它将一个数值分为整数和小数两个部分,我们读数时,前面是个位数、十位数……,后面是十分位数、百分位数……而没有0位数,这有点类似公元纪年法,有公元前、公元后,而没有公元0年。

	/**
	 * 整数部分、小数部分
	 * 
	 * @param number
	 */
	private static void integerDecimal(BigDecimal number) {
		// TODO Auto-generated method stub
		BigDecimal zhengShu;
		BigDecimal xiaoShu;
		if (intNumber(number)) {
			zhengShu = number.stripTrailingZeros();
			System.out.println(number + "的整数部分为:" + zhengShu);
		} else if (!intNumber(number)) {
			BigDecimal number01 = bigAbsolute(number);
			xiaoShu = number01.remainder(BigDecimal.ONE).stripTrailingZeros();
			zhengShu = number01.subtract(xiaoShu).stripTrailingZeros();
			System.out.println(number + "的整数部分为:" + zhengShu + "、小数部分为:" + xiaoShu);
		}

	}

一个数不能被1整除,那么就有余数,其余数必为小数部分,因此我们可以如此拆分。

stripTrailingZeros(),这是BigDecimal类自带的原生方法,它的目的是去除小数点后尾部无效的0(当然在保留特定位数的小数时可能会用到),同时这个方法也为原数值的精度保留提供了一定的帮助,让数值不会“失真”(比如在进行了一系列复杂的、循环性的计算之后,利用这个方法可以确保结果以“1”的方式输出,而不会出现0.9999999……的情况)。

我们在main(){ }方法中输入几个数字进行测试一下:

		integerDecimal(Bi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人杰鬼雄

程序无止境,谢谢大家的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值