java 对大数操作的支持举例

 

大数:超出整个数据类型的保存范围,要使用对象的形式进行操作,以前使用字符串处理;

java中提供了java.math.BigInteger , java.math.BigDecimal  分别处理大的整型,和大的浮点数;

BigInteger、BigDecimal都是java.lang.Number类的子类;

——— BigInteger处理大整型:

package com.mldn;

import java.math.BigInteger;

public class BigNumber

{

public static void main(String[] args)

{

String num1 = “99999999999999999999999999999999999999999999999999999999999”; // 用字符串保存大数

String num2 = “999999999999999999999999999999999999999999999999999999999999”;

BigInteger big1 = new BigInteger(num1); // 实例化大数对象,

BigInteger big2 = new BigInteger(num2);

System.out.println(“相加:” + big1.add(big2));

System.out.println(“相减:” + big1.subtract(big2));

System.out.println(“相乘:” + big1.multiply(big2));

System.out.println(“无余相除:” + big1.divide(big2));

BigInteger[] result = big1.divideAndRemainder(big2); // 返回的是数组,商、余数

System.out.println(“有余相除:” + “商:” + result[0] + “余数:” + result[1]);

}

}

/*

administrator@xu-desktop:~$ javac -d . work/BigNumber.java

administrator@xu-desktop:~$ java com.mldn.BigNumber

相加:1099999999999999999999999999999999999999999999999999999999998

相减:-900000000000000000000000000000000000000000000000000000000000

相乘:99999999999999999999999999999999999999999999999999999999998900000000000000000000000000000000000000000000000000000000001

无余相除:0

有余相除:商:0余数:99999999999999999999999999999999999999999999999999999999999

*/

————-BigDecimal处理大型浮点数:
1.最重要的是小数的四舍五入:

public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode);

当divisor除数为1时,任何数除以1等于其本身;
scale表示商四舍五入的位数,如:scale = 5,表示从商的小数点后第5位上四舍五入;
roundingMode指定操作模式:BigDecimal.ROUND_HALF_UP表示四舍五入操作;
—–实例:

package com.mldn;

import java.math.BigDecimal;

class MyMath

{

public static double add(String num1, String num2)

{

BigDecimal bd1 = new BigDecimal(num1);

BigDecimal bd2 = new BigDecimal(num2);

return bd1.add(bd2).doubleValue(); // 大数相加并拆箱

}

public static double subtract(String num1, String num2)

{

BigDecimal bd1 = new BigDecimal(num1);

BigDecimal bd2 = new BigDecimal(num2);

return bd1.subtract(bd2).doubleValue(); // 大数相减并拆箱

}

public static double multiply(String num1, String num2)

{

BigDecimal bd1 = new BigDecimal(num1);

BigDecimal bd2 = new BigDecimal(num2);

return bd1.multiply(bd2).doubleValue(); // 大数相乘并拆箱

}

public static double div(String num1, String num2, int scale) // scale表示四舍五入的位数

{

BigDecimal bd1 = new BigDecimal(num1);

BigDecimal bd2 = new BigDecimal(num2);

return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); // 大数相除并拆箱

}

public static double round(String num, int scale) // 精确地四舍五入

{

BigDecimal bd1 = new BigDecimal(num); // 四舍五入的大数

BigDecimal bd2 = new BigDecimal(1); // 任何数 除以 1 等于它本身;

return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); // 大数四舍五入并拆箱

}

}

public class BigNumber

{

public static void main(String[] args)

{

String num1 = “99999999999999999999999999999999999999999999999999999999999”; // 用字符串保存大数

String num2 = “9999999999999999999999999999999999999999999999999999999999”;

System.out.println(“相加:” + MyMath.add(num1, num2));

System.out.println(“相减:” + MyMath.subtract(num1, num2));

System.out.println(“相乘:” + MyMath.multiply(num1, num2));

System.out.println(“无余相除:” + MyMath.div(num1, num2, 2));

System.out.println(“四舍五入:” + MyMath.round(“0.888888888888888888888888888888888888”, 3));

}

}

/*

administrator@xu-desktop:~$ javac -d . work/BigNumber.java

administrator@xu-desktop:~$ java com.mldn.BigNumber

相加:1.1E59

相减:9.0E58

相乘:1.0E117

无余相除:10.0

四舍五入:0.889 // 从小数点后第三位开始四舍五入

*/

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《java 对大数操作的支持举例
本文地址:http://www.xiupu.net/archives-182.html
关注公众号:嗅谱网

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!