`
jacobcookie
  • 浏览: 95065 次
社区版块
存档分类
最新评论

java--大数操作

阅读更多

 

/**
 * 
 */
package edu.fjut.bignumber;

import java.math.BigInteger;

/**
 * 
 * 大数操作指的是操作的数字非常大,大到超过其数据类型的表示范围
 * 如:999999999999999999999999999*9999999999999999999999999
 * 所以此时就需要使用对象的形式进行操作,在以前若碰到此问题,实际
 * 上都是采用字符串的形式进行处理的(进行拆分、一位一位的计算)。
 *
 * 在Java中为了解决这样的难题,提供了两个大数据对象:
 * BigInteger(大整数)、BigDecimal(大浮点数)decimal为小数的意思
 */
public class BigNumberDemo {

	public static void main(String[] args) {
		
		String num1="9999999999999999999999";
		String num2="8888888888888888888888";
		
		BigInteger bg1=new BigInteger(num1);//实例化BigInteger对象
		BigInteger bg2=new BigInteger(num2);
		
		System.out.println("加法操作:"+bg1.add(bg2));
		System.out.println("减法操作:"+bg1.subtract(bg2));
		System.out.println("乘法操作:"+bg1.multiply(bg2));
		System.out.println("除法操作:"+bg1.divide(bg2));//只得到商值,无余数

		BigInteger []result=bg1.divideAndRemainder(bg2);//相除之后有余数
		System.out.println("相除之后的商值为"+result[0]);//第一个值为商值
		System.out.println("相除之后的余数为"+result[1]);//第二个值为余数
		
	}
   /*输出结果为:
	*  加法操作:18888888888888888888887
	*  减法操作:1111111111111111111111
	*  乘法操作:88888888888888888888871111111111111111111112
	*  除法操作:1
	*  相除之后的商值为1
	*  相除之后的余数为1111111111111111111111
    */
}

 

/**
 * 
 */
package edu.fjut.bignumber;

import java.math.BigDecimal;

/**
 * BigDecimal类的主要功能是进行小数的大数据计算,最重要的
 * 一点是,计算结果可以精确到指定的四舍五入位数.
 * 
 * 如果想要进行四舍五入操作,则必须依靠依靠以下方法:
 *  public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
 *  --scale表示四舍五入的位数
 *  --roundingMode表示四舍五入的操作模式,ROUND_HALF_UP......
 */

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 sub(String num1,String num2){
		BigDecimal bd1=new BigDecimal(num1);
		BigDecimal bd2=new BigDecimal(num2);
		return bd1.subtract(bd2).doubleValue();
	}
	
	public static double mul(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){
		BigDecimal bd1=new BigDecimal(num1);
		BigDecimal bd2=new BigDecimal(num2);
		return bd1.divide(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	public static double round(double num,int scale){
		BigDecimal bd1=new BigDecimal(num);
		BigDecimal bd2=new BigDecimal(1);
		return bd1.divide(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
}

public class BigDecimalDemo {
	
	public static void main(String[] args) {
		String num1="39379.23412";
		String num2="68258.73529";
		System.out.println("加法操作:"+MyMath.add(num1, num2));
		System.out.println("加法操作,四舍五入(保留二位):"+MyMath.round(MyMath.add(num1, num2),2));
		System.out.println("除法操作,四舍五入(保留三位):"+MyMath.div(num1, num2,3));
	}
    /*输出结果为:
     * 加法操作:107637.96941
     * 加法操作,四舍五入(保留二位):107637.97
     * 除法操作,四舍五入(保留三位):0.577
     */
}

 

0
4
分享到:
评论
1 楼 李永成 2012-12-18  
学习了,很好啊

相关推荐

    java-util-1.3.1.jar.zip

    1. **集合框架扩展**:可能包含对Java内置集合类(如List、Set、Map)的增强,提供更高效的操作,例如快速排序、线程安全的实现等。 2. **日期和时间处理**:提供更加灵活和强大的日期时间操作,弥补Java 8之前的...

    使用java大数做ACM大数题的常用介绍

    本文将详细介绍如何使用Java的大数类来解决ACM中的大数题目。 首先,`BigInteger`是Java `java.math`包下的一个类,它支持任意大小的整数运算,包括加、减、乘、除、模运算以及比较操作。在处理大数时,我们可以...

    Java编写的大数运算

    在Java编程语言中,大数运算是一项重要的技术,特别是在处理超过普通整型或浮点型所能表示范围的数值时。Java提供了内置的`BigInteger`类和`BigDecimal`类来支持大数运算,这两个类位于`java.math`包下。本项目...

    JAVA_大数操作

    总结来说,`JAVA_大数操作`主要涉及`BigInteger`类的使用,包括但不限于基本的算术运算、模运算、字符串与二进制转换、比较操作以及更复杂的数学运算。熟练掌握这些知识点能帮助开发者处理大数问题,从而拓宽Java...

    Java 实现大数类

    在Java中,虽然有内置的`java.math.BigInteger`类可以方便地处理大数运算,但为了学习和理解大数操作的原理,我们可以自行实现一个大数类。这个项目的目标就是创建一个自定义的大数类,实现基本的大数加法和减法功能...

    JAVA大数加法与乘法

    在这个主题"JAVA大数加法与乘法"中,我们将深入探讨如何使用`BigInteger`类来执行大数的加法和乘法操作。 `BigInteger`是Java中用于表示任意精度整数的类。它支持任意大小的整数,可以进行加法、减法、乘法、除法...

    JAVA - RSA- JS 加密

    此主题涉及到的知识点包括RSA的原理、JAVA和JavaScript实现RSA加密的过程,以及如何在两者之间进行互操作。 1. **RSA算法原理**: RSA(Rivest-Shamir-Adleman)算法基于大数因子分解的困难性,生成一对公钥和私钥...

    nc.jar.zip_java 矩阵_java 计算_大数_大数计算 java_矩阵

    Java的大数类`java.math.BigInteger`和`java.math.BigDecimal`提供了对任意大小整数和浮点数的操作,如加、减、乘、除、比较等,以及模运算、幂运算等功能。这对于金融计算、密码学、精确计算等场景非常有用。 接...

    java 大数类 计算器 文件比较

    在Java编程语言中,大数类(BigInteger)是用来处理超过普通整型范围的大整数的。BigInteger类提供了无限制大小的整数运算,这使得它在处理需要精确计算的场景中非常有用,例如金融计算、密码学或者科学计算。这个...

    acm之java大数用法

    ### ACM之Java大数用法 在计算机编程领域,特别是在算法竞赛(ACM)和高性能计算场景中,处理超出标准整数类型范围的大数值是非常常见的需求。Java 提供了两个非常强大的类来处理这种需求:`BigInteger` 和 `...

    java-jdk-8u231-windowsx64修复bug.rar

    在某些情况下,程序员可能需要将一个大数组分割成多个小数组。在JDK的早期版本中,这可能涉及到一些未预期的行为或错误。在8u231版本中,这个问题被修复,确保了数组切割操作的正确性和效率,避免了可能导致程序崩溃...

    IT笔试面试--大数乘法的详细代码及注释,已经调试运行正确

    在IT笔试和面试中,大数乘法是一个常见的算法问题,尤其在Java编程语言中,因为Java提供了处理大数的内置类`BigInteger`。然而,理解并手动实现大数乘法算法有助于提升对数值计算的理解和编程技巧。本文将详细解释...

    java大数相加

    当两个数值超出标准整型或浮点型数据类型的范围时,Java提供了`java.math.BigInteger`类来处理这样的大数运算。这个类能够表示任意大小的整数,并提供了丰富的数学操作方法,包括加法。本篇文章将深入探讨如何使用`...

    java 数组实现大数加减乘除运算

    在Java编程中,处理大数(大数据)的加减乘除运算是一项常见的需求,尤其是在金融、科学计算等领域。数组作为一种基础数据结构,可以用来存储这些大数,通过自定义算法来实现四则运算。以下是对标题和描述中涉及的...

    Java-Redis面试题

    Java-Redis面试题 缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到DB去查询,可能导致DB挂掉。解决方案是使用布隆过滤器,布隆过滤器主要是...

    简单的java大数阶乘运算算法

    Java的`java.math.BigInteger`类提供了一种存储和操作任意长度的大数的方法。我们可以利用这个类来实现阶乘计算。有两种主要的算法可以用于计算大数阶乘:递归和迭代。 1. **递归算法**: 递归算法是最直观的实现...

    java 处理大数模板

    Java作为一种强大的编程语言,提供了一种优雅的方式来处理这样的大数,这就是Java的`BigInteger`类。这个模板将详细介绍如何在Java中使用`BigInteger`来解决大数问题。 `BigInteger`是Java的标准库`java.math`包中...

    java 大数加减法及乘法

    在Java编程语言中,处理大数(大数据量的整数或浮点数)是一个常见的需求,特别是在加密算法、金融计算或者数学应用中。Java提供了一个内置的类`BigInteger`,用于进行任意精度的整数运算,包括加法、减法和乘法。`...

    Java-RSA-DES.rar_des javascript_doc_rsa_rsa des文件加密

    首先,RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,它基于数论中的大数因子分解难题。RSA的工作原理是,每个用户有一对密钥,即公钥和私钥。公钥可以公开给任何人,用于加密信息;私钥则必须保密,用于...

    java练习_大数运算_BigInteger.pdf

    Java大数运算 BigInteger 类的方法调用 正如我们在 Java 中处理大数运算时,需要使用 BigInteger 类来实现,这是因为 Java 的基本数据类型无法存储非常大的数字。BigInteger 类提供了几个重要的方法来进行大数运算...

Global site tag (gtag.js) - Google Analytics